PDA

View Full Version : Determining a programming path



pyth0n2
January 7th, 2015, 05:33 AM
Determining a programming path

Hey there Ubuntuforums community.

I'd like to start an open discussion if I may.
With the wealth of experience and varying backgrounds in these forums, I'd like to get to know more about what each person has learned and why.

For example, this is my plan:
Im currently learning python (as a learning language) and hope to spend about 6-12 months getting it down pat.
then I plan to learn, in this order: C++, Java, SQL
The overall goal is to do some penetration testing/white hat hacking (at home as a hobbyist. no illegal stuff.),
make my job as a server administrator easier by automating monotonous and handy tasks, and dabble in creating games.

But I'd like to know about YOUR path. Things like:

What path did you choose?
how long did you spend on each language?
why did you choose the language(s) you chose?
maybe you chose to only learn one but totally master it, how did that work out for you?
How have your choices worked out for you? would you change them?
are there languages you wished you learned?
what have you done with your knowledge? (made a living with it, built games, created apps) Brag a little.



I think this is all very interesting, and would like to know more about the backgrounds of the programmers in these forums.
So please, reply, and let's get this discussion started.

While, you're at it, feel free to offer suggestions as to how other people might improve their choices.

TheFu
January 7th, 2015, 03:33 PM
This sort of question is asked all the time. I've programmed professionally in about 25-35 different languages. Most of the time, I learned just enough to do what was necessary and no more. Really learned C/C++ and Perl and 1 other language nobody knows.

Got tired of typing the same stuff over and over - http://blog.jdpfu.com/2011/10/19/how-to-learn-to-program There are other posts here by me with more details.

In my experience, programming is an entry-level position for most people. After 10 yrs, I moved onto architecture, systems design, and project management for much more money, more control and more responsibility. A few folks really need to program - they are artists. That didn't apply to me, but I've met a few people like that over the years. Sadly, only 1-2% of all programmers are in that group. The rest of us need to find something else to do for the sake of the users, public safety and the world.

Oh - and I worked as a rocket scientist programming GN&C software for spacecraft then moved into commercial industry and learned many other things, traveled for work extensively, and learned that some jobs out there just suck. Being in control is better than watching ignorance run a company. I've been semi-retired since 2007, but still write some perl web-apps for friends and fun. I only worked 17 yrs before retiring - I realized that working was actually costing me money and interfering with enjoying life.

flaymond
January 8th, 2015, 02:10 PM
I agree with TheFu, (actually he also helping me to choose what programming language to learn base on his experience and opinions). I'm just use these both languages. Python and C (I'm a totally beginner). I found C is simple than C++. Well we know that C++ is a 'C with Classes' that provide OOP mindsets and feature is so big to catch up for a short time. It hard to get and pick it up for first time (though it's not impossible to do that and there's a lot of people do that out there). I just wanna stick with C for a long time, I think since I also found that I can programming an embedded system with it .(I love the speed of execution and simplicity). I'm a beginner, I don't think I help you much...but yea...this is my experience and opinion.

pyth0n2
January 9th, 2015, 05:58 AM
Thanks TheFu, That is alot of experience!
If you are still lurking around. Do you find that only learning enough to do the task at hand means that if you ever come back to needing that language again ,you need to relearn what you already knew?
surely dabbling in 25-35 languages would mean that you would accidentally start coding in one language, when you meant to code in the other. right?


So, interprog, You are learning python and C at the same time?
how is that going? I would think that would be confusing.
how are you finding C as a first language?

(P.S. I completely understand your comment about OOP, I was picking up python pretty fast until I hit that topic. Im STILL working on understanding it)

TheFu
January 9th, 2015, 12:01 PM
Thanks TheFu, That is alot of experience!
If you are still lurking around. Do you find that only learning enough to do the task at hand means that if you ever come back to needing that language again ,you need to relearn what you already knew?
surely dabbling in 25-35 languages would mean that you would accidentally start coding in one language, when you meant to code in the other. right?

No. Human brains can easily compartmentalize learning of different subjects. It is only trying to learn that first language where the student really should only have 1 language, not two, for the initial stages. You'll learn this as you grow older. After all, you studied Math AND Science in school at the same time, right? Was that confusing? Computer languages are different enough to be separate too.

For the second question ... did you learn to ride a bicycle? I haven't ridden in many years, but there is zero concern that I could again. In fact, I was able to ride unicycles in my teens and around 33 yrs old, at a company party, I borrowed the clown's unicycle and rode around. Took about 2 minutes to get up, but ... when they say it is like riding a bike - that applies to computer languages too. Of course, if I only made a few changes to a program in language sdfdf34323423s, then my skill doesn't improve in THAT language, but since my knowledge has grown over the years, parts that I didn't understand before fit together so much better.

That is why I strongly suggest learning Python as a first language and C as a 2nd. Python provides a feeling of accomplishment quickly, but only C can teach how compilers work, how machine code works, why python isn't as fast and what is likely happening under the python covers, java covers, perl, ruby, R, Rexx, HAL/S, {insert-language-here} ... that's what C teaches. Plus, the Linux kernel and modules are written in C. Micro-controllers are usually programmed in C ... it is an indispensable language to know even if you don't use it again because it isn't nearly as productive as almost any OOP language.

I tried to learn OOD and OOP on my own for about a year and failed. In the end, I attended a community college class and something "clicked". For programs with less than 1,000 LOC, OOP is overkill, not needed. But when things start to get complex, that's where OOP helps our human minds create less buggy code.

pyth0n2
January 9th, 2015, 12:31 PM
That is why I strongly suggest learning Python as a first language and C as a 2nd. Python provides a feeling of accomplishment quickly, but only C can teach how compilers work, how machine code works...

That just brought up an interesting notion in my head.

Everywhere I've looked python has decidely been the most recommended beginner language.
However alot of times it is for reasons like the one you have mentioned. "Python provides a feeling of accomplishment quickly"
Which, dont get wrong, is a great tool for helping undecided people make decisions to go for it. It is also helpful to ensure someone who might give up quickly continues to learn, explore and stick with their language.

Could it not also be possible that learning those things that only C can teach, can be more of an accomplishment (to some people) than being able to learn slightly faster and produce results quicker?
I am starting to get the mindset that if I am to devote a substantial amount of time to becoming proficient in my first language. I might aswell make it one that teaches me all those extras aswell, rather than let me accomplish things a bit quicker.

NOTE:
This is in no way saying your opinion is wrong. its just a thought that occured to me and I would value the input() of yourself, or whoever decides to answer.
I could be thinking about this all wrong.

TheFu
January 9th, 2015, 12:44 PM
You aren't going to write tiny scripts in C. The overhead is just too great and there are 400 tiny scripts that you will want to write for your own "itch" and systems management. Python isn't just a good first language, it forces good programming practices like proper indentation, while still being highly useful.

Learning C requires learning things that most beginners don't understand and won't understand for some time. Compiled languages take more time, more understanding and just aren't as useful on a daily basis as scripted languages. When you are trying to learn step-by-step procedures, stick with that. Your brain is learning to think differently. You don't need the added hassle of dealing with makefiles, debugging sessions, compiler and linker options, learning about binary compatibility or the differences between shared objects and static linking. There are 100x more things you need to know with C - best to start with python and learn 20 things first that will pay off for your C use later.

This is one of the main reasons why Java isn't a good first language to learn. Compilers screw up learning and waste time on any non-trivial project. I remember having to wait 45 minutes for compiles to run, then another 45 minutes for links to complete. With scripting languages, all that time isn't wasted.

So - yes, you are all wrong. ;) Learn python first. Then come back 6 months later for C. Of course, a motivated learner can do whatever she wants and be successful, but most people want the fastest way to X.

OTOH, I don't know python, so who am I to tell you to learn it? The things that python forces on us are mainly the things I dislike about it. When I was a teen, that stuff would have been good. Now that I'm er ... older and set in my ways, I want to program in my own style, not the style mandated by others. I've had many jobs where I was forced to program in a common style for the good of the team. I don't do that anymore.

pyth0n2
January 9th, 2015, 02:31 PM
That definately makes sense.

Thanks for taking to time to adjust my mindset and send it in a proper direction.

I definately want to learn a low-level language at some point though. It gets me excited to think about learning more deeply about how computers, and programs specifically, operate.


For example, I learned the other day that when you assign a variable. It isnt just giving a name to a value.
It is giving a human readable name to a position in memory and storing a value there, so that you can recall it later with a simple variable name rather than a memory reference.
Now that is interesting!

(I hope I learned that correctly)

ofnuts
January 9th, 2015, 03:27 PM
For example, I learned the other day that when you assign a variable. It isnt just giving a name to a value.
It is giving a human readable name to a position in memory and storing a value there, so that you can recall it later with a simple variable name rather than a memory reference.
Now that is interesting!

(I hope I learned that correctly)

Yes, that's quite correct... except whet the memory position doesn't exist, because the variable only exist as a value in the machine registers, or when it doesn't exist at all, because the compiler has found it useless (both cases due to optimization, which is why the code intended to be debugged has very few optimization (and none that would change the code flow).

flaymond
January 10th, 2015, 02:33 AM
No,I mean that I always use both to learn in order from Python to C (mostly C). I'm using them both a lot and I don't think to change that any soon. Python is obviously easy to me for first time I'm learning it (and you also need to learn the basics Bash in the same time to manage your scripts) and it share some syntax and rules in C, so it will really help you learning the procedural programming like C. I always asking question about the same thing over and over even I already made a choice. The reason is I always unsastified with what I'm learning. In my mind " Why other language like C/C++ is more powerful than what I'm learning now? ". I just impatient, that's all. I stick with Python if I were you for a while (6 months - 12 months) because it's really helpful when you try another language. My advice as a beginner(totally) is just stick with what you have, learning and understand the first one is better than keep changing language. It help you to understand the fundamentals and algorithm in programming. Indeed, learn C will show you the background of Python that it hide (I can see now why veterans prefer C as a must language to learn). It hard for me to understand C even it's a simple language. It shows you memory management, what the character holds in binaries, the addresses. That make it more complex for an absolutey beginner to programming. Switching language for first time is just gonna make your view blurry than ever. I still learning Python and will continue to do so since it's a scripting language that don't have much problem in portability. It's also fun to make a GUI program using Tkinter with just a few sets of instruction in Python. Here is my overview of both -

1. Python is very easy to start with for beginners and you can pick it up for several months or a year (If you give a lot of effort)

2. C is ideally ok for first time, but require a very lot of time to understand the library and how it's working. (Years I thought)