Profile cover photo
Profile photo
b bundi
403 followers -
time traveller
time traveller

403 followers
About
b's posts

Post has attachment

Post has attachment
Public

Post has attachment

Post has attachment

Public
https://twitter.com/roomthinker/status/839885053534535680


Every so often I am asked the following question:

“I am a student / hobbyist interested in learning programming. What should I learn?”

“Should I learn python / Java / Ruby / C++ / C#, Android, PHP etc.”

The answer is NONE OF THE ABOVE.


Let me attempt to share what i think are foundations of a successful career if its your profession, or a solid grasp if you are a hobbyist


The foundation of everything is a course called “Algorithms and data structures”. Take this course very seriously.


Further, the best programming languages for practice in that particular course are C / C++ and Pascal.

Not Java. Not PHP. Not Python.


Why? Two main reasons:

1) The basic environments have zero bells and whistles. You must implement everything yourself
2) Pointers


Think of them as the equivalent of learning the fundamentals of an internal combustion engine. Takes long. Requires work. Requires effort.


But once you do - you are at home with most engines that are thrown your way. You just need to read the manuals to figure out where stuff is


Once you have grasped those fundamentals it is easy to migrate to productive languages like Java and C# and python and the rest.


There are tons of books and free online courses on data structures and algorithms. Make use of them.


And yes, when I was in uni many years ago i thought it was nonsense learning pascal and C when there were so many new languages.


A career later I see the point & the benefits of going down that route.

There is always a shiny new language. But fundamentals NEVER change


Second thing you need to learn is object oriented programming. Classes, objects, interfaces, methods, etc


Third thing you need to learn is discrete mathematics. In particular logic, geometry, sets, graphs.


If you want to do more interesting stuff - probability, algebra, calculus, operations research


Third thing is architecture - how do you organize your data structures and algorithms into a coherent program / suite or programs


Fourth thing is source code control & management & management - use of tools like git, mercurial etc and other tools like GitHub, bitbucket


Till there you should have a good foundation for a reasonably successful career either as a professional or as a hobbyist.


If you really want to push the envelope you can check out these
1) Functional programming paradigms & languages - LISP, F#, Scheme, OCAML


2) Analytics and statistical tools - R, Julia, Octave, Matlab = for data science and number crunching


3) Databases - set theory, relational theory, structured query language (PL-SQL, T-SQL, etc)


4) Web programming - HTML, CSS, Javascript, HTTP, server side languages


5) Mobile programming - Android, Xamarin, iOS (Swift / Objective C)


6) Low level / operating systems / device drivers / IOT programming - C / C++, Rust, Go


7) Massively parallel programming - CUDA, OpenGL


There are a few others but i forget them at this point.


Again I stress - fundamentals. You must have a firm grasp of the fundamentals. Or you will be unable to adapt to this industry.


There is always a new language , new framework, new way of doing things. They change at an alarming pace.


With a firm grasp of fundamentals you know what to expect in an implementation. All you need is documentation to find your way around.


Web programming and mobile programming IS STILL PROGRAMMING. You still need to know how the plumbing works.


Ask your favorite web developer if they know HTML. Then ask them if they know how HTTP works.


It is true you can get away without knowing any of this stuff thanks to all the wizards and frameworks - eventually you will be caught out


And finally, and most importantly, learning programming of any kind requires investment.

1) Time
2) Effort
3) Dedication
4) Practice
1 reply 14 retweets 7 likes
Count Dracula‏ @roomthinker 15h15 hours ago

You are not going to learn this stuff after a two day course with lunch and tea breaks.

The only way to learn is to do it. Again. Again


Continuous improvement. Continuous learning. Better yourself. Take initiative.


After a career in the trenches i can tell you for 95% of the time, the language you use to program is irrelevant.


The actual expression is not your source code - it is your mind.

Picasso will still paint a masterpiece even if all he has is a cat’s tail


But having said that here are guidelines of what you should have a grasp of to have a long career programming


1) A strongly typed language - C++ / Java / C# / Go


2) A loosely typed language - Python, PHP, JavaScript, etc


3) A functional programming language - LISP, F#, OCaml


4) At least two domain specific languages - and here I strongly recommend Regular Expressions and SQL


5) Unit testing & mocking


6) Design patterns


Last but not least let me repeat what i have been telling my teams for years

“Your work is to THINK. Writing code is but one of your tools”


Post has attachment

Post has attachment

Post has attachment

Post has attachment

Public
Eiichiro Oda

Wait while more posts are being loaded