I taught myself Python on the Internet and so can you
aysinoruz.com
aysinoruz.com
>>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!
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'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.
I'm always looking to see what others experiences are so I know how I can help make future experiences better.
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 can be difficult to grasp, I recommend checking out this resource to learn how to use it: https://try.github.io/levels/1/challenges/1
(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)
Most engineers I know doing non trivial machine learning work got their start in university labs.
Here is the link for my github: https://github.com/aysin
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. :) ]
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.
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).
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.
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.
"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".
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.
,but that is because I am an unabashed infosec enthusiast that attempts to force feed everyone infosec information.
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.
[0]: https://news.ycombinator.com/user?id=edw519
[1]: https://docs.python.org/2/tutorial/index.html
[2]: http://learnpythonthehardway.org/
[3]: https://projecteuler.net/
[4]: https://docs.djangoproject.com/
[6]: https://github.com/kissgyorgy/Womanager
[7]: https://github.com/pokerregion/poker
[8]: https://pypi.python.org/pypi/poker https://pypi.python.org/pypi/enum34-custom https://pypi.python.org/pypi/pytest-raisesregexp
[9]: http://www.jackkinsella.ie/2011/12/05/janki-method.html