This post heavily resonate with my own experience. Specifically this:
>>During my studies I learned C++. Personally I think that C++ is quite a challenging language for a beginner. I did get the occasional straight A but I wished that I would have started with an easier language
I've took C++ course during my university days and that made me hate programming for years. The language is huge and full of things which beginner programmers shouldn't have to think about.
It was back in early days of the Internet so it was hard to find information. It was just too hard to me to comprehend why we need virtual/friend classes, bizarre constructors rules and why the code has all those strange symbols. The picture of programming I've got is a lot of boilerplate and little essence. We were coding simplistic calculators but the class hierarchy and all the nonsense had to be there.
I've learnt Python as my first programming language several years after college (I dropped out; the reasons are many but one is that I really didn't enjoy the perspective of becoming a programmer and it was all just a chore) and my love for programming was resurrected. For me it was a web based programming game (http://www.pythonchallenge.com/) paired with a lot of googling but today it would probably be Code Academy (it wasn't available back then). What was really great about the experience is that I was coding fun things like automatic downloaders, simple image generators and a (again very simple) web crawler after a week of it. I didn't need to care about arcane language constructs at all.
I've learnt C few years after that and today I do successful commercial project in C and most of the auxiliary programming (accounting, hobby projects, quick scripts etc.) in Python.
The negative experience with C++ was so strong I don't touch the language to this day. Programming gives me a lot of joy and C++ was close to killing it forever. While it's a stronger sentiment than the author expresses I have the same advice for people just starting:
I can echo quite a lot of your sentiment. In high school we learned C/C++ (on TurboC++!) and had a blast. We were quite happy to get anything done, and never aspired to much since it took so much effort to do even simple things. Ideas and algorithms had a lot of hoops to jump through to get the computer to understand them.
Fast forward a number of years, and I'm an engineer working in a plant. I need to get some analysis done, and Excel just ain't cutting it. Somehow I happen upon pandas and IPython, and it's magic. I remember building classes for calculating vectors and such in high school, full of pointer nonsense and terrifying piles of boilerplate. (You haven't lived until you're a newbie attempting to code a templated class that makes doing physics look like an ordinary equation - you'd think it's easy, and it is! Right until it ain't.)
And now? I open up localhost:8888 and spin up a new Python kernel. Within seconds I am importing opencv and doing stuff I couldn't dream of in high school. And it's fast! I lost years from the discouragement of fighting linkers and arcane syntax errors. Intellectually gratifying sometimes, but ultimately not worth starting in. Accomplishing real work early counts for a lot.
Never mind that the curriculum attempted to switch to Java in our third year in high school. We all rebelled and won, and I feel like we dodged a bullet there.
I liken learning C++ as a newbie to using a chainsaw to slice a pizza: it's not going to be pretty no matter how you do it and you might as well chug down the whole thing. It's always important to pick the right tool for the job, and when you are trying to get into the programmer's mindset, it's really easy to miss the forest for the trees. Programming is a wonderful intersection of math, algorithms, creativity, and the messy reality of modern hardware; that's both a curse and a blessing because it means that you have so many ways of looking at it that a beginner might just think that they aren't smart enough, when the reality is just that they are trying to bite more than they can chew.
Totally, slow by slow learning helps. I was overwhelmed when i started first but then i took my time and tried to teach myself. Thank you for nice comment!
Other than a few lines of Basic when I was 10, I had never coded before. Three years ago I sat down with my laptop, fired up the MIT Introduction to Computer Science course, and began my journey into learning Computer Science and Programming.
I've stuck with Python mostly, with forays into JavaScript, C and Haskell since then.
In a couple of weeks time I'll be leaving main stream teaching and heading off to work for The Raspberry Pi Foundation.
I can't recommend Python enough, as an entry level programming language. The online resources are numerous and of high quality, the community is helpful and welcoming to beginners, the language is human readable and easy to debug.
> After 7 months of self studies, I can add “Python programmer” to my resume and I didn’t have to get a loan to pay for College
You probably shouldn't put "took free online classes" as evidence of expertise on a resume. That's not sufficient evidence of actual proficiency in the language.
It's also the reason why many advocate having a populated GitHub profile in lieu of professional experience/learning.
It's true but it's more of an evidence than graduating from college anyway.
(not to dismiss college education here but what you get there are good theoretical fundamentals not anywhere close to proficiency in programming or specific languages)
I don't know whether you went to college/university or not, but my program definitely gives you both of those things, in addition to very good theoretical fundamentals. Not to say that you've got the necessary real-world experience after completing it, but you're well on your way.
Depends on your program. Schools vary widely in what they offer. Depending on the university, you could get a job in IT or a research lab and write code there.
Most engineers I know doing non trivial machine learning work got their start in university labs.
I think it's appropriate to say that they are familiar with the language at least, perhaps in a 'technical skills' section. They might be able to pass a technical interview if it was designed for an entry-level or intern position, which is what they should be applying for anyway.
I've been sending friends who want to learn to code in python to Learn Python the Hard Way and more recently, have picked up https://hellowebapp.com/ that allows them to build their first website using python. They've been a little overwhelmed (as expected), but with a "mentor" there to answer questions, they seem to be getting it.
A.O., I am glad that you've become a programmer. Keep it up.
Does anybody else dislike non-free (both in $ and license) educational materials, particularly in the field of programming?
Full disclosure: I don't know anything about Udemy other than that they apparently charge money for educational materials related to programming.
Seems to me that knowledge is passed around from person to person via various mediums, but every given idea had to start somewhere. (Let's put simultaneous independent discovery aside!)
So... Let's say that Bob learned the syntax of python array literals from Jane who learned it from Mike who read the docs which were written by Fran who first learned the syntax by reading a post on a mailing list written by Sam who wrote the code that defines the darned syntax (though arguably he based it his experience with other languages).
Where the does an outfit like Udemy fit in that picture? How does somebody take public knowledge and charge for it? Should there be pushback against this practice? Is the license under which the documentation was released relevant?
[EDIT: Hmm. Ok, I accept these answers. There was a reason I asked. :) ]
Non-free educational materials aren't charging money for the public knowledge, they're charging money for the effort it took to put the public knowledge in a form that is easy to learn from. This effort is very often non-trivial. The public knowledge is still out there, and the person putting up material behind a paywall isn't subtracting from the availability of that knowledge.
Now, it would certainly be different if the person was literally just copying the documentation, or somebody else's free or non-free materials, because thats just plagiarism. But I think if a person goes to a significant effort to make educational material and wants to charge for it, and there are people to whom this material is valuable to pay for it, then power to them.
Often, the raw knowledge regarding programming is just as freely available as the tools: official documentation for compilers, interpreters, libraries, whatever, or, failing that, the tool itself as a source of knowledge.
Many such resources are available free of charge.
Other people come along and write different materials based on that same foundational knowledge. Maybe they are better writers, and can express the same thing in a more understandable way. Maybe they have a different slant on the whole topic, like the difference between reading The Little Schemer and the Revised Report on the Algorithmic Language Scheme.
In any case, these authors certainly may introduce something new: their own writing! If you don't find any value in that over the baseline documentation, then you are not obligated to read it, but I see nothing wrong with authors charging for their own creative work, should they so desire. (There is also nothing wrong with them giving it away for free, should they so desire. It is theirs to distribute how they see fit.)
It is conceivable that the original documentation and/or product could be licensed in such a way that further works describing the same content could be inhibited. I vaguely recall some open source product that was developed and supported by a commercial entity forbidding commercial documentation from including the name of their product in some form (while further non-commercial documentation they found acceptable).
Why should there be pushback? You have educational materials with varying levels of digestibility. One person may refuse to pay because they can just read the python docs, another may be willing to pay $10 because someone spent effort to present the information in a directed, guided, and easier to digest manner. Another person may spend a few thousand to get guided instruction from a teacher instead. Such is life.
If all you need is the public knowledge, you can just read the Python grammar, which fits in a page.
The reason Udemy and such are useful is not because they include facts, but because they offer a structured and thought-out guide to understanding and learning them. A lesson is more than a dump of information.
They add value (for people who like video tutorials) and offer an alternative, so why shouldn't they be able to charge for it? They don't just take free content and try to resell it slightly repackaged (at least as far as I know) and they compete fairly with free resources, so I think that's ok.
RE license: As long as they don't copy directly from the documentation or the examples, the license shouldn't really matter. And even then, at least some examples from the docs might be to trivial to protect (you won't succeed claiming to own the code snippet "list = [1,2,3]" or similar). I don't think you can have a successful language aimed at the public and at the same time successfully forbid people from creating third-party documentation for it.
I've been learning Python myself but I'm fortunate to live in Chicago with the excellent http://chipy.org group. I've even taken part in their student mentorship program as a mentee. I hope to see more organizations put together a mentorship program.
I was taught the basics of c++ in three months. I'm not a genius or anything but I never thought that it was any harder to use simple c++ than it is to use python. C++ also allows you to learn programming at a much lower level as you get better with it.
A good foundation in math is imperative (if you're serious about programming). Sure, anyone can pick up syntax but can you program, that's the question. In my experience, it's what makes a difference between a good or bad programmer.
Couldn't disagree more. A recent link on HN was along the lines of "ability to mange complexity is the key differentiator of a good programmer" and I think this is vastly more important.
Most code has very little mathematics in - beyond the core skills of recognising patterns and abstractions. If that's all you mean by 'a good foundation in mathematics' then we agree but I don't think your formulation is terribly useful.
Code does not have to have mathematics for someone to have a difficult time writing it. By a good foundation, I meant being able to understand fundamental mathematical concepts such as those taught in discrete math. It's not a numbers class but it makes you use your brain in ways which help and facilitate the writing of code.
I remember reading this years ago he explains my point better than I do:
"Most people think of math as doing arithmetic or memorizing arcane formulas. This is like asking if you need perfect spelling or an extraordinary vocabulary to be a good writer.
Writing is about communication, and math/programming is about the process of clear, logical thinking (in a way that you can't make mistakes; the equation doesn't balance, or the program doesn't compile). Specifically, that logical thinking manifests in:
Ability to estimate / understand differences between numbers: O(n^2) vs O(lg(n)), intuitive sense of KB vs MB vs GB, how slow disk is compared to RAM. If you don't realize how tiny a KB is compared to a GB you'll be wasting time optimizing things that don't matter.
Functions / functional programming (is it any coincidence that the equation f(x) = x^2 is so similar to how you'd write that method? The words "algorithm" and "function" were around in the math world far before the first computer was born :-))
Basic algebra to create & reorder your own equations, take averages, basic stats
So, I'll say you need a math mindset, being able to construct & manipulate mental models of what your program is doing, rather than a collection of facts & theorems. Certain fields like graphics or databases will have certain facts you need also, but to me that's not the essence of being "good at math".
Couple of things I see often in online language learning is that they (a) assume everyone is a n00b programmer and doesn't know much programming; and (b) often don't highlight the idiomatic way to write code for that language.
@maximedev Thank you for your feedback but i didn't change any behavior of the scrolling. Can you send me a screen shot or give me an example what is the issue. Sorry for the inconvenience, i am still learning how to handle this.
@aoruz: My story matches up with your's quite closely. One suggestion I would have for a future book to read is either Black Hat Python, Grey Hat Python, or Violent Python all "hacker" related books that are great for anyone interested in security at any level. BlackHat Python is number one pic.
I'm a bit confused, doesn't the post say "I studied Computer Science at college"? So the poster studied and has a CS degree and yet it took them '7 months' to learn Python?
Not sure how this is confusing. Studying Computer Science at college != programming proficiency. I'm finishing up my last college class (online University) will graduate with B.S. in CS Major S.E. got good grades in both C++, Java, and CS related classes and I have been attempting to get better at Python for the better part of a year now and still don't know shit and would hardly qualify my self as a web developer let alone a software engineer.
I understand your confusion, but during my studies I learned different language and I was rushing to catch up with other students. I feel like, I learned more during my self studies than college.
Online courses are really great, but the Python tutorial is sufficient in itself.
I did this:
- Read edw519 free PDF book, jump out of the bed and start learning. [0]
- Read the Python tutorial from A-Z and learned it. [1]
- Read Learn Python the hard way book and practice. [2]
- Solved some problems from Project Euler. [3]
- Learnt Django. (Started with the tutorial) [4]
- Built something with Django.
- Solved some problems from CheckIO. [5]
- Built something with PyQt. [6]
- Built my own library, even if it's stupid. [7]
- Released a couple of packages even if they are small. [8]
The key thing is to learn AND BUILD something at the same time, and try to remember everything deeply. I used the Janki method [9] to learn statements, code snippets.
This took me about a year, but after that, I did not need to apply for a job, however I did once and got that too.
Sorry for not commenting on the linked article, but websites that mess with scrolling really irritate me, almost irrationally. I'm quite comfortable scrolling, the innovation in trackpads over recent years has made it almost pleasant to scroll down a page, why oh why do people feel the need to add some sort of script where when I scroll 1cm it jumps 4 pages down, then when I try and move a tiny bit it erratically jumps a paragraph and then all the way to the top of the article!
Open up your browser's debug tools and throw this in to the console `document.addEventListener('mousewheel', function (event) { event.stopPropagation(); });`
>>During my studies I learned C++. Personally I think that C++ is quite a challenging language for a beginner. I did get the occasional straight A but I wished that I would have started with an easier language
I've took C++ course during my university days and that made me hate programming for years. The language is huge and full of things which beginner programmers shouldn't have to think about. It was back in early days of the Internet so it was hard to find information. It was just too hard to me to comprehend why we need virtual/friend classes, bizarre constructors rules and why the code has all those strange symbols. The picture of programming I've got is a lot of boilerplate and little essence. We were coding simplistic calculators but the class hierarchy and all the nonsense had to be there.
I've learnt Python as my first programming language several years after college (I dropped out; the reasons are many but one is that I really didn't enjoy the perspective of becoming a programmer and it was all just a chore) and my love for programming was resurrected. For me it was a web based programming game (http://www.pythonchallenge.com/) paired with a lot of googling but today it would probably be Code Academy (it wasn't available back then). What was really great about the experience is that I was coding fun things like automatic downloaders, simple image generators and a (again very simple) web crawler after a week of it. I didn't need to care about arcane language constructs at all.
I've learnt C few years after that and today I do successful commercial project in C and most of the auxiliary programming (accounting, hobby projects, quick scripts etc.) in Python. The negative experience with C++ was so strong I don't touch the language to this day. Programming gives me a lot of joy and C++ was close to killing it forever. While it's a stronger sentiment than the author expresses I have the same advice for people just starting:
Go with Python and have fun!