• Forum
  • Lounge
  • All programming proffesionals, give me a

 
All programming proffesionals, give me advice

I'm a graduate mechanical engineer who has eventually discovered his true passion: programming. It started 2 years ago quite randomly where a fellow friend was programming some code. I tried learning on this forum, then other tutorials. My character is such that any studying endeavors I pursue wane over the months and prove futile. However with programming, I seem to be coming back for more, always dedicating even one hour to study C/C++. Conclusion? I find programming interesting and that interest never dies down. Maybe this is what I am meant for?
I am about to turn 24 and hoping I can have plenty of time to become proficient programmer while still young. Can it be done? How long did it take you all to become "expert" programmers?
Here and there I have been programming and my material covered has basically been a self study of the first 75 pages of"the C programming language" by kernighan and ritchie. Plus the first half of this sites tutorial and very little of "thinking in C++" (the free e-book). My plan is to become flawless with C then move onto C++ concepts: classes (much later)
Is self studying programming easy? Because im moving forward at a slow pace (I work at the same time).
What tips would you recommend for someone in my place in terms of study material, course of action, how much time to dedicate? Would there be a good job market for engineering software? Because thats what I eventually plan to do: make software for engineering analysis. I will post more questions in due time.

Thanks guys.

How long did it take you all to become "expert" programmers?


10,000 hours or more.


My plan is to become flawless with C then move onto C++ concepts: classes (much later)


Language is a secondary issue. You need to learn programming. Start with a simple language first to get the basic concepts. There are multiple threads on Internet on which languge to choose, however most agree that it is better to chose a simple language first, with fast write-compile-test turnaround. Languages with interactive environment are a great help when experimenting with programming.

This can be helpful:
http://norvig.com/21-days.html
Last edited on
rapidcoder, thanks for the link im going to read it now. Immediately I agree with the author:
"Why is everyone in such a rush?"

Dont kid yourself, im not one of those people who "want to learn in 1 month" ;-)
Well hold on now. I say don't start with a simple language- Honestly it makes it less fun, it's less interesting, and you feel less powerful (at least I do) when you start programming in 'simple' languages.

You are obviously getting some experience in c++, why not stick with it?

*** end exasperation ***

Okay first, why are you starting with c? Is there some reason you think it's necessary? I can see some slight reasoning- but I personally love the object oriented aspect of c++

Second, being an 'expert' in c++ will take you, IMHO, years. I've been programming now for about 4 years- and I can do just about anything I want However I'm not an expert, by any stretch of the imagination. When I say expert, I mean not just the core language features and the stdlib, but I'm talking about third party stuff, and platform specific stuff. Graphics, audio, etc

Third, teaching yourself programming is awesome! I've learned more on my own than any of my friends who have taken every course they can in college. I'd say go for it! If you find yourself an niche, you can make plenty of money as a programmer!
closed account (1yR4jE8b)
I suggest AGAINST first learning C, then moving to C++. Truth is, even though C++ is a superset of C, there are many new things about C++ over C that make it a completely different beast. In fact, there are many things that C programmers swear by that C++ programmers would curse others for doing. There is very much 'unlearning' to do when going from C to C++, if you want to learn C++ then just learn C++.
Sputnik wrote:
How long did it take you all to become "expert" programmers?
I am not an expert, but I know enough to know that in software engineering nothing is terminal. By learning dry language trivia you will produce better solutions. Ok, this is sadly true, but the core ideas are in your mind (algorithms, design concepts) and those continue to evolve ad infinitum. I think that the learning curve is a bit smoother after adolescence, so there is an advantage to a slightly later start.

Sputnik wrote:
I am about to turn 24 and hoping I can have plenty of time to become proficient programmer while still young.
"plenty of time" "proficient programmer while still young" - man, those are oxymorons (I am relatively young myself, so do not feel offended.)

Sputnik wrote:
Is self studying programming easy?
The difference is in the initial barrier. Once someone has given you the foundations you can access more information in the literature. You have learned math and problem solving. That is what matters primarily. You will lack a bit of computer science background though.

I know you are eager to become a programming hacker. Still, I advise that you start with conventional interpreted language. One that directly supports graphics and sound, like a variant of BASIC. Draw a circle, draw an ellipse, play a tune, make an idiotic game. I can not understand why people constantly recommend to initiates unchecked compiled languages with no media output. The person will immediately face a myriad of problems and get no impression for the computer's capabilities from the result.

If you decide to go with C/C++, you should know that no one understands object-oriented programming completely. It is very hard to make classes more useful then their procedural counterparts. It takes a lot more than simply knowing C++. You will be hard pressed to misuse the OOP facilities of the language in attempt to utilize them at all costs and program in the home-style. The exception handling mechanism is also very easy to abuse in generic way. C is a language with fewer quirks and facilitates programming techniques that are better understood. In any case, try to assimilate the nuts and bolts of C programs.

Regards
+1 simeonz. daaym.. You said exactly what I was gonna say.

I suggest AGAINST first learning C, then moving to C++. Truth is, even though C++ is a superset of C, there are many new things about C++ over C that make it a completely different beast. .


I strongly disagree. C is a lingua franca of computer science. Everything is compatible with it. Everything has a C API at some level. If you want to write low level stuff, device drivers, operating systems, libraries, etc, knowing C is obligatory - these beasts are usually written in pure C. This can't be said for C++, which is easily replaceable by many other languages.


In fact, there are many things that C programmers swear by that C++ programmers would curse others for doing. There is very much 'unlearning' to do when going from C to C++, if you want to learn C++ then just learn C++


I agree, but on the other side, if you learn C first, you would know what to avoid. C++ too often provides you with a feeling of security, which is false, because in fact it is just as easy to break things in C++ as it is in C. Except that if you screw up in C, it is easier to find out and fix, because C programs are usually more straightforward, there are not so many levels of abstraction and indirection, it is much easier to debug when something doesn't work.


Honestly it makes it less fun, it's less interesting, and you feel less powerful (at least I do) when you start programming in 'simple' languages.


Depends on what is fun. If for someone (like for me) fun is getting things done fast and seeing the effects, "simple" languages are great fun. You can learn much faster instead of wasting two days to find a dangling pointer in the application (which I had many times and it was kinda fun but not such fun like not having a dangling pointer).

And "simple" doesn't mean "less powerful". I wasn't referring to Basic or PHP. I thought more of beasts like Python[1] which are very easy to get started with, they have simple and logical syntax, yet you can do almost everything with them that can be done with C or C++ with fewer lines and fewer bugs. Also, if you know Python, you may be perceived as a more valuable programer on the market [2] than if you knew only the popular languages like C, C++ and Java.


There is very much 'unlearning' to do when going from C to C++


There is much more unlearning if you go from e.g. C++ to Python. Every language has its own preferred style of programming and its own set of quirks. C++ has probably much more quirks than any other language.

[1] In this group of simple, but powerful languages you may also consider: Scala, F#, R, OCaml, Haskell, MATLAB. They are great for writing serious scientific and engineering stuff.
[2] http://www.paulgraham.com/pypar.html
rapidcoder wrote:
I strongly disagree. C is a lingua franca of computer science. Everything is compatible with it. Everything has a C API at some level. If you want to write low level stuff, device drivers, operating systems, libraries, etc, knowing C is obligatory - these beasts are usually written in pure C. This can't be said for C++, which is easily replaceable by many other languages.

QFT. C is a beautiful language.
closed account (1yR4jE8b)
You completely misunderstood what I said. Don't get me wrong, C is very important and all programmers should learn it (in fact, I prefer it over C++ in many situations). All I'm saying is that learning C with the express intent of learning C++ from that is not a good idea. If you want to learn C++, then just go and do it, and learn it the 'C++ way' and not just 'C with Classes'. Learning C++ properly will cover all of the relevant C aspects, everything else is just cruft and should be saved for actually learning C. The benefit of learning C++ before learning C is that most standard C++ ways of doing things don't even exist in C so you NEED to learn the C way.

I strongly disagree about the statement "if you learn C first, you know what to avoid". How would someone that's been programming in C for a year (especially someone that is self-taught) and that uses printf exclusively in C to perform output going to know how to avoid using that and use the iostream library instead, or using new/delete instead of malloc/free. Most wouldn't probably even bother to learn them, because they already know the C way and it works already so why care? C++ is a completely different beast than C, and you can't just write C code, compile it with g++ and expect to call it good C++. Most C programmers I've met who claim to know C++ usually end up doing just that (or a horrible, bastard mix of it) and it usually ends up as a massive nightmare in maintenance.

Also, a well designed C++ application is no more or less difficult to debug than a well designed C program. The only difference is that because C++ is a much more complex language, it's much more difficult to create said well designed application. Believe me, I'm not a C++ fanboy by any means, I can acknowledge its faults: it's massive learning curve being close to #1. In my experience, however, it would probably be easier to track down a bug in said C++ application because all relevant functions and resources would be grouped into namespaces/classes, stl algorithms would take care of much of the leg work, and inheritance/polymorphism would greatly decrease the total LoC in the program. This, of course, is purely subjective so let's not go further down this fiery road...

As a side-note, in my 5 years experience as a computer science tutor/teaching assistant, it's been much much easier for beginners to start with higher level languages and work their way down then to start at the low level and work their way up. That way, you can learn the fundamentals of structured and logical thinking without having to worry about things like pointers and memory allocation. A lot of universities are moving away from Java in their first year programming courses and using Python instead for this very reason.

And like someone said before, those higher level languages usually provide some kind of graphics/gui library so you aren't stuck making console applications all the time.
A lot of universities are moving away from Java in their first year programming courses and using Python instead for this very reason


I think this is a cycle we see repeating itself over and over again in Universities curriculum. Back in my days, Pascal was used before C was used and then they go to Java (C++ was skipped). Java was *THE* programming language during that era partly because of Java applets initial fame (subsequent shame) on Internet. Back then browser wars were also brewing.

Ok now back to topic. I do agree Python produce lots' of ready-made language constructs for a developer to express their algorithm and design in a very concise way. This is good but the creator "force" to use whitespace as blocks get very nerve-wrecking for developers who is so used to white-space galore where we indicate our intention using braces.

The whitespace issue is one I find it hard to be comfortable with. Even with upcoming Python 3.0 I see little interest in Python creator to remove that whitespace constraints and this seem to be it's selling point among tons of programming languages in the developers communities :P
How long did it take you all to become "expert" programmers?

When it happens I'll let you know...
Topic archived. No new replies allowed.