Ask Slashdot: How To Get Started With Programming? [2017 Edition]
Reader joshtops writes: I know this is a question that must have been asked -- and answered -- on Slashdot several times, but I am hoping to listen from the community again (fresh perspective, if you will). I'm in my 20s, and have a day job that doesn't require any programming skills. But I want to learn it nonetheless. I have done some research but people have varied opinions. Essentially my question is: What is perhaps the best way to learn programming for my use case? I am looking for best possible resources -- perhaps tutorials on the internet, the right books and the order in which I should read/watch them. Some people have advised me to start with C language, but I was wondering if I could kickstart things with other languages such as perhaps Apple's Swift as well?
and the KERNAL book.
How to get started in programing. Well, I get started each morning by starting the kettle. Whilst the kettle boils, I wash out the French Press and my mug. I drink my coffee whilst reading Slashdot to see if there is anything I should be kept up-to-date on. By the time I finish it is time for another cup of coffee, so the process begins again, by that time, I have to reply to some troll who thinks climate change is a myth and that man never went to the moon.
I usually have three or four cups of coffee- and then it is time for lunch.
After lunch, I find myself able to start programming.
"That's the way to do it" - Punch
Get a PC computer. Install Ubuntu. Connect to Internet. Google free tutorial. Start programming.
If you don't mind spending a little bit of money, $25/month, I like Treehouse (http://www.teamtreehouse.com)
Start with BASIC, same as the rest of us.
there you will find a book called LINUX
it will have a cd on the back and it will say slackware
resist the urge to wet yourself in fear, you're already well on your way
put this cd in your ibm pc compatable computer and reboot
thats control alt delete
follow the prompts to install slackware
i reccomend you let it guess partitions because that part is scary!
once you have installed slackware linux you will have a fully functioning compiler
then you just need to learn to program then write the program
them you can compile program
hope that helps
First I must wonder what your existing background is with respect to computing. Depending on this I would have different answers. If you have never programmed so much as an Excel spreadsheet or "Hello, world!" in BASIC, I would then ask what is your objective? The language you want to learn will be dictated by this more than anything, as there exist "total beginner" tutorials for any language imaginable and they're all pretty easy (and don't apply to any real problem solving beyond that).
If you are interested in programming for its own sake, I would recommend something like The Structure and Interpretation of Computer Programs by Abelson and Sussman (https://mitpress.mit.edu/sicp/full-text/book/book.html). For something that covers a lot of bases top-to-bottom very quickly, the book Thinking In Java by Eckel can be very informative (even if you never make it more than 1/3 of the way through it). If you like the logical and linguistic side of things, you may be interested in ANSI Common Lisp by Graham.
I would only recommend starting in C if you have a significant breadth of computer knowledge but want to understand more of how things work "under the hood". Be warned, this journey is not trivial.
It's high level enough that it's not overly confusing. It's low-level enough that you are forced to learn a little about the actual computers you're running the programs on. It's a predecessor to a *lot* of other programming languages, and can be used to understand the other languages. If you start with swift, you may have a hard time understanding other iterative languages, even if they share the same base because they're too far removed. C is like learning Latin or Greek for a historian or linguist. Sure you can learn just your specialty language and be good at it, but you won't understand connections.
Don't expect a job in programming though, unless you live in a third world country. Even India will start bleeding programming jobs to cheaper markets soon.
Find something routine or complicated that you do and automate it. Maybe your job involves TPS reports. Well, automate adding the coversheet. Maybe you like gaming. Look into modding.
Or you could go to school where you have deadlines and lab classes. Whatever the case, avoid trying to learn a bunch of theory in a vacuum.
The Daddy casts sleep on the Baby. The Baby resists!
...then solve it using a program.
If your day-job is doing stuff with Excel, then perhaps automate something. Write a script to extract stuff out of a .csv file, etc. If your job is non-tech, then perhaps use your tech skills to build on hobbies.... e.g. if you're into video games, build a tiny game in JavaScript... if you're into sci-fi books, write a program that finds stuff in text of sci-fi books, if you're into finance, write a program to find correlations between closing prices of various companies, or extract anything useful out of earning reports---automation is the key. Find something you're interested in, then automate it (or a part-of-it), etc.
Note that language/platform doesn't matter much. Yes, you can do complicated ``programming'' in Excel. It's just not something most people do, but that's what you're into, then go for it.
Started languages I'd suggest: JavaScript (mostly because you can get started quickly, show off your work quickly, and go from nothing to something fun quickly). As second language, learn SQL... yes, you can do wonderful analysis in SQL. Then I'd suggest PHP... and/or Perl (yah, lots of folks would object, but if you learn Perl, you'll never have to learn another "useful" language ever again), then learn C/C++, since you don't start appreciating the ease-of-use nor overhead of other languages until you learn C/C++.
https://wiki.python.org/moin/BeginnersGuide/NonProgrammers
It really depends what you want to do -- programming isn't really one size fits all. That said, Python is a great language -- clean, fairly simple, great libraries, lots of resources, lots of directions you can go grow in.
How to get started? Well, I start by getting up in the morning and turning the coffee machine on. /. a quickie, maybe troll some dude about global warming or moon conspiracies or whatever is up, and then I take a quick bite followed by two cups of coffee.
After that, I check
Then, I can slowly start the day's programming, unless it's Perl-Friday, in which case I need two more cups of coffee and a small flask of tequila first.
That's how we started back in the day in high school AP comp sci and its still the best way to do it. I would start with C++ and not Java because at the end of the day C++ is the "bigger" language and you can jump to Java from C++ later a lot more readily than the other way around and yes it's probably harder starting out with C++ than with Java but it's worth the pain IMHO, but this is semantics. My real point is you need a giant language treatise and you need to sit there and learn everything in the damn book no matter what language you pick.
Bjarne has two books. One for newbies with no prior CS background and one for people with some exposure. I recommend getting the easier book first and getting the tougher book about 8-9 months later.
You also need a separate book on data structures and algorithms. I think algorithm books are all the same. There's no good way to learn that stuff except to slog through it like a soldier.
Give yourself 2 years.
Do not pay for a code academy. Its a waste of $20k.
That's all you need to get started. 2-3 books and you need to learn everything in them from cover to cover.
1. Pick a business problem that you understand thoroughly
2. Pick a common technology stack, i.e. LAMP
3. Learn how to use the tools
For learning the stack and tools I would suggest pluralsight.com
Why's Poignant Guide to Ruby
... even though it was written for a now-obsolete version of Ruby.
Why? Because it is entertaining enough to get you through many important basic concepts without falling asleep.
Otherwise, I recommend the approach that was common at one time and fallen out of favor. Start with machine language. Not even assembly code. Machine language. Best thing ever: punching IBM 1620 (decimal, thank goodness!) instructions one at a time on punch cards! That was high school. In college, we started with MIX. I prefer a real machine code to a made-up assembly code, though.
Still, some in high school thought "the compiler" was some bit of hardware in the computer, once we moved-on to Fortran. At least the instructor tried!
If you don't begin at the beginning, many will be forever-befuddled at what really goes on.
I'm in my 20s, and have a day job that doesn't require any programming skills. But I want to learn it nonetheless. I have done some research but people have varied opinions. Essentially my question is: What is perhaps the best way to learn programming for my use case? I am looking for best possible resources
That you need to ask this question at all might be an indicator that programming is not for you. While I really hate to roll out this tired and over-used meme, if this solution has not already answered your question, there is no hope: GOOGLE IS YOUR FRIEND.
If you want news from today, you have to come back tomorrow.
If you're in your 20's, the train has already left the station on this. The time to learn programming is when you are young, say 8-18 years old, and you have the curiosity and time to really dig into it. At this point in your life, your learning patterns and brain has already started to become set and you'll never be able to catch up or compete with the people who understand the language natively. Instead, focus on something easier like graphic design or web development or IT support if you feel you must be in the tech industry, but be warned all of these jobs have relatively short shelf lives and you'll likely be back to doing something differnent by the time you are in your mid-40's. If your lifestyle can support this then by all means go for it.
There's no need for analysis paralysis. Try out some Python (I enjoyed reading Python Crashcourse by Eric Matthes). I would recommend Learn Python the Hard Way, but it hasn't been updated to cover Python 3. If you enjoyed Python programming, take a look at Apples's (imo) excellent Swift resources and guides. That language actually isn't a lot harder than Python to get started in. If you have an iPad, check out Swift Playgrounds. It is a game, but gives you a good feeling for basic programming concepts.
My language of choice would be Python.
Dead easy, powerful, interactive, fun.
1) Get some kids' coding books (on paper) and read through them to get the basics.
2) Get python - the plain IDLE from python.org will do, no need for pycharm or other fancy environments.
3) Code some simple stuff to get the basics. Try out graphics (tkinter if in python) - you will get immediate rewards by nice visuals. Bounce balls around the screen, draw gradients or simple animations.
4) Connect coding with your hobby or work and figure out a more serious project to go deeper into the language with a real goal.
Get a book and read it to get the basics of the lanugage. I would pick a language such as Java or C# unless you want to focus on web development. I recommend C# because I think Visual Studio is pretty easy to work with and debug. There's lots of near-religious debate about languages and some people try to steer noobs into languages like C which is a terrible idea IMHO. Once you get the basics, set a goal for yourself...make a calculator or a poker game, etc. Build it one step at a time using sites like StackOverflow to ask questions when you get stuck. Then just keep doing it...automate stuff at work, look for opportunities to keep building your skill set...expand into other languages or database stuff.
I wrote a couple of blog posts just over a year ago that I think are still relevant:
* Getting started with programming
* Getting better at programming
But it's a really personal thing. Some people hate reading through books, others couldn't do without them. Try as much as you can until you find something that really peaks your interest, that you can't put down, and follow it to see where it goes. Good luck!
I'd suggest thinking about programming as something you might do as a hobby vs. something you would learn from textbooks/tutorials. Then you'll be in a really solid position to make it a habit rather than a passing thing.
Question 1 would be: Do you have an interest in a specific area that you might be able to spin into a programming scenario? Ex. Interactive Fiction / Visual Novels / RPG Maker type stuff will get you thinking about all the right kinds of problems as you work with whatever system you choose and provide you with constant feedback and rewards as you get to look at what you've made.
It turns out I'm the kind of person that likes close to metal/retrocomputing, and my onramp was mostly through reading books/doing exercises/copying other people's work:
I started out with BASIC. Creative Computing from David Ahl ("Best of Creative Computing") has a bunch of period BASIC programming / typing exercises that will help you focus on detail and also get you into reading your system's of choice's manuals as you adapt them to work under your scenario. I'd suggest if starting today to set up an 8-bit ATARI working system, those have an interesting architecture and a good community at Atari Archives.
After you're already set up with a little background, I found The C Programming Lanugage from K&R invaluable, as well as Starting Forth by Leo Brodie https://www.forth.com/starting-forth/ are great period texts that provided me with a comfortable space. Later, I had fun with FORTRAN77 too (the indent rules are great). These were easy to work with on any Linux system (for an extra challenge, work on an ARM architecture and start worrying about memory alignment).
Online there's a bunch of great learning systems too, so presumably others will mention those. (I remember having a good time with Try Ruby (http://tryruby.org/) and with the Untrusted Javascript game (http://alexnisnevich.github.io/untrusted/) but I think both of them might want you to have some previous experience with computers and/or like hands-on "here's a factory, good luck". Similar vein if you want to do parallel programming later, TIS-100 was pretty amusing as a learning game, but it costs money :P)
Good luck! (Also, quite looking forward to hearing about everyone's suggestions!)
I know anyone that does programming for a living will laugh at this comment but if you don't require it for your job try AutoHotKey. I know its not "real" programming but you will be able to learn some basics and be able to automate so many tasks. You should be able to learn enough to get started in a few hours and you will be surprised at how much time you can save. You can learn it from youtube and even their help file can get you started. Only move on to real languages when you have a need for it.
I recommend you learn C and C++, especially if you want to become a highly paid Data Scientist or some useful career.
You'll be forced to take other classes anyway, good to start out with the one that will be most useful year in and year out.
-- Tigger warning: This post may contain tiggers! --
I think there are three paths to follow.
Question - where do you want to end up?
1) Find a project you are interested in such as an open source project, game, tool, etc. Figure out how you can contribute be in HTML, web pages, Javascript, database work such as MySQL, PHP etc. Learn whatever tool(s) they are using and figure out how to contribute. The key is to be interested in the project, not neccesarely the tool or language.
2) Pick a language and go through some tutorials. There are tons of stuff on almost every language. Pick one that interests you but stick to something mainstream. This is a good reference to Python for example: http://www.openbookproject.net.... I recommend something that is cross platform and machine independent.
3) Get an Arduino or Raspberry PI and build something. Flash the lights, read the temp, make the propeller spin, etc.
In any of the above - Have fun and don't make it a chore!
"I say we take off, nuke the site from orbit. It's the only way to be sure."
The language you learn is not necessarily as important as the skills and understanding of programming in general that you develop. By this I am referring to understanding best practices and development models. The same development models and schemes are in use today as from many decades ago, and that is because they are still applicable. You can be proficient in many different programming languages, but if you are not familiar with different development models and their uses, that will not be as useful and make you as valuable as you could be.
I would suggest starting with a language like Java, which for me was easy to pick up, and start working with it writing code to do simple tasks. Also pick up some books (library or online) and start researching and learning about development models. A fun website to play around with Java that I stumbled across is: http://codingbat.com/java
I wish you luck!
All iPads with iOS10 either come with, or can have installed for free the Playgrounds app into which you can install playgrounds that teach programming.
It sounds silly and at first it may seem like it as you play through a programming a kind of game figure. But the lessons get more and more advanced, and along the way you are learning Swift.
As you can far enough along you can decide if you like programming enough to really get serious, then perhaps investigate stuff like the Stanford programming course videos (free), including a course just on iOS development... but you don't have to go that way, the concepts you learn learning Swift apply to most languages pretty well.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Different languages have different strengths and weaknesses.
If you want to get into the nitty-gritty, then C is awesome.
If you want to write code that leaks memory like a sieve then Java is the way to go.
If curly braces somehow offend you, and you do not understand or care about what a global interpreter lock is, go for Python.
If you want to wear your braces keys down to nubs, tcl is the language for you.
FWIW, the language that excites me the most is Swift. YMMV.
I think you'll have much more success and find it's easier to stick with "Learning to Program" if you refine you goal a bit, otherwise the category is just too broad to make sense of. What are you specifically interested in, which can be a personal interest or possibly what you would like to do for career advancement.
Do you want to make a game, a web application, learn how to use the command shell to solve problems, create a database, build a mobile application, design a website, automate computer workflows, embedded systems, robotics, audio synthesizers, IoT, etc. etc. etc.
Not only will this give you some motivation as you work through the more mundane aspects of programming, but it will also help guide your progress and help select which languages and tools are most suited for your goals. This is especially important for self guided education, since without a goal you will tend to get stuck constantly thinking "well that tutorial was interesting, what do I learn next?"
1. If you like the low level stuff (embedded systems, robotics, routers, etc.), you'll likely want to focus more on C/C++ .
2. If you're looking at automating administrative and/or computer processes, you'll more likely want to focus on Python and the Bash Shell
3. If you're looking at designing a web sight front end, you'll most likely want to focus on Javascript and HTML/CSS
4. If you're looking at doing database work, you'll want to focus on MySQL, (is PHP still the thing?)
5. If you're looking at doing games, you can use most languages (although C++ is mostly used in the industry) but you may prefer one of the packaged game engines (Unreal, Game Maker, Unity, etc.)
6. If you're just wanting a lightweight language to play around with simple algorithms, I'd recommend Lua, Python, or Javascript
7. If you're wanting to make a mobile application, you should probably consider Java (android) or Swift (iOS)
7. If you really have no idea what you want, I'd probably suggest Python or Java as those are the easiest to branch out from with the huge suite of libraries available for both.
At the end of the day, you can't really make a "bad" choice for a starting language as high level programming concepts will mostly translate from one language to the next. However, you can pick a "better" one for what you think you'll ultimately want to be doing so you're not immediately forcing yourself to learn new syntax. As you grow, you'll definitely want to branch out and experience other languages because they all offer unique insights that will help you mature as a software developer.
So, to recap. Narrow down "Learning to Program" into a specific area of programming that interests you. Once you have a Goal, you're choice of languages should be narrowed down to one or two viable choices. Pick one, and then find what resources and communities are available for getting started. All of the language options I listed above have vibrant and active communities that will help you along on your first steps.
Good luck!
Mechanicing? Doctoring, Arting?
Web? Mobiles? PC? Servers?
Different Languages. And different skills.
C is a reasonable starting Place, but not useful except for small CPUs and Low Level drivers.
Very easy to understand and yet very powerful, you will use it a lot later. Later if you want to get more machine intimate, try C and assembler.
Find something you want to do and then find the best tool to do it with.
Just learning a language because you want to know how to programming will murder your motivation. Your goal shouldn't be to learn a language, but how to do something. From there you can start expanding your knowledge base and looking into alternative options and start making decisions based on your experiences.
Perhaps you pick the "wrong" place to start, but when you're in a position to recognize that you already have the needed expertise to find the right path.
First, you need an long-term goal for programming. The current job market appears to demand hyper-specialized individuals, and if you don't have a few years of something major under your belt, you won't be able to get a job. (Of course, you can disregard this if you're programming as a hobby rather than intending for a career.)
For getting started - practically anything that contains examples and also explains how things work. If one doesn't seem to be working out, you can easily switch to a different one.
The actual gap seems to be resource for Intermediate programmers - those who are skilled, but "not skilled enough". I haven't really seen any suitable resource for that group.
exercism.io is a good starting point. The site has a lot of languages to choose from, and it presents you with a bunch of exercises you can complete for each language. Once you complete an exercise and submit it, you can visit the site, and see your code there. You can also see how others solved the same problem, and comment on their solutions, as well as read comments from other people.
Always remember the chickens that have gone before
Python is a powerful language, but it also hides a lot of mundane details from you that you don't need to know yet. I would suggest learning Python, then C, then Java, in that order. Python teaches you about high level concepts (classes, iteration...), and C teaches you low level machinations (memory management, function pointers, bitwise...). Java would be your port of call if you moved into several areas of programming later, and it involves the concepts you would have already learned from Python and C, so you will probably want to learn Java as well.
As far as HOW to learn, I have been asked this before, and I highly recommend tutorial resources online over print books; Some are more up-to-date, and they are usually more concise. The Getting Started guide over at Python.org and the GNU C Tutorial are your friends. Try finding examples of code for different programs and learn from the way other programmers have approached the same problem, as well.
Lastly, there is sometimes a right and wrong way to develop a particular piece of software. If you come across example code with a lot of while True loops or gotos, try not to adopt someone else's bad habits the way my brother has adopted all of mine. ;-)
Last year, I'd have told you avoid languages like Ruby, Python, etc, and work on the latest greatest: node.js, Swift, and, of course, Java. However, it's a year later, so don't learn any of that rubbish, you need to learn iLng, Visiwo, G, and, of course, Java.
As long as you have a good grounding in those languages, many of which are so new they literally don't exist yet, you should be fine for the next three to four months.
You are not alone. This is not normal. None of this is normal.
Start with C. Learn how to compile / link without the help of an IDE. Two birds with one stone here, you'll learn important concepts about how resources are used, and you'll avoid being vendorlocked into a single IDE.
An internal system operation returned the error "The operation completed successfully.".
Have a look through the CompSci program at a college. You'll end up with starter books like Python Programming: An Introduction to Computer Science and Programming Languages: Principles and Paradigms. Obtuse, boring stuff, but a way to start.
As for starting with C? I suggest you take a look at C# Design Pattern Essentials by Tony Beavis. Just give it a read through. I like C# because it lets you define interfaces and classes in ways which are conducive to modern programming; the point here, however, is to give you an exposure to the ideals of modern OOP. These are tools. You won't understand them or their usage; you'll get the general ideal, though, in enough detail to resolve. Modern programming--and modern OOP particularly--is about building tools that can plug universally into other tools, not about building giant programs. An understanding of the destination will give you a way to frame what you learn as you go, as well as something to question fundamentally, and something to measure yourself against.
OOP isn't the only kind of programming; it's the fundamental type of programming. You want OOP for building large, complex applications; for specific problem sets, you'll want some other paradigm. AI, financial analysis, some mathematical problems, and other such things will be vastly easier to solve and less-ugly when implemented in some other type of programming language--meaning not in C#, and not in something like Java or Python that does roughly the same thing as C#. You could build an airplane out of sails and make it flap its wings or something, but you'd probably want jet engines; yet reciprocating internal combustion engines are the type of engine used in almost everything consuming gaseous or liquid fuel, save for jets and rockets which should not be replaced with reciprocating engines.
Acquiring a fragment of a large basis of knowledge is hard. Programming isn't a thing; certain subsets of programming are things. You aren't going to learn all programming, and you can't just learn programming without understanding how problems in computer science are solved--believe me, I've tried, and I always end up working on computer science problems because they're fun and interesting and... well, because I never learned computer science; these aren't familiar things to me. I should rectify that; a quick acquisition of new tools conveys an enormous amount of power, and problems which seemed daunting become trivial.
When you look at all the books I haven't yet read in my library, you quickly realize the frightening truth: this isn't even my final form.
Support my political activism on Patreon.
I don't know that I'd start with C. If you are a Windows user, I'd suggest C#. A) It starts you off right with object orientation, and B) It's probably one of the fastest paths to useful code, with a gui ( if that's important to you ).
There are thousands of tutorials out there to get you going too, so there's that. If you are completely green to programming, this won't be easy, but it'll be better that C.
Mod me down with all of your hatred and your journey towards the dark side will be complete!
Find some open source software, study the language used to write it, and make some changes. Add a configuration option or two. Add some features you would like the software to have. Give yourself goals that require programming, and you will learn programming as you learn how to meet your goals.
The best way to become a successful programmer is to do the exact opposite of what the thousands of $50k/year sysadmin losers who waste time on this website while waiting for their jobs to be outsourced did.
Start by closing your account and deleting any bookmark you may have to Slashdot and you'll be ahead of most people.
Then get a good copy of the 7400 line data sheets.
Python gets you producing stuff fast, lets you concentrate on learning to program rather than learning to compile.
Then, C. Build a Python extension which gets you up to speed with C (and serves as a base for many other languages as well). C Is a good starting point for C++ or Java or Objective C.
This stuff is all free on Linux. If you don't have a dedicated Linux machine, download Virtual Box and install Linux on a VM and use that. After than then go ahead and pay Microsoft if that is your desire.
I am very small, utmostly microscopic.
This would not be a popular opinion, but it is mine and I will share it with you.
I would personally start with a language like Scala.
If you are going to learn one language, this language is well worth the effort of learning.
There will be other languages like Go, Swift, Perl, Elixir, Nims, Rust, Ruby that people will suggest, and they are all good choices, but ultimately not as a complete of a choice as Scala - stick with JVM, and stick with strong typing, it will save you a lot of headaches down the road.
If you cant stomach Scala, then settle for Python. It will get you far and wide, and you will be able to get shit done quick and almost as good as with Scala, but you'll need some additional tools once you reach that summit, and realize that Scala is a whole different mountain that you should've been climbing all along.
Good luck, have fun, and dont listen to the haters.
It REALLY boils down to this, really: what industry do you work in, or want to work in?
There's a metric fuckload of programming-based industries, or programming-helped industries. (automation of your own tasks so you can slack off and post on the internets or play Quake)
From mechatronics to IT to web development to AI to gaming and banking, you have a wide variety to choose from and a wide variety of languages used across them.
Look up an industry you are interested in.
Then look up job positions for those industries, specifically paying attention to the languages used. (and/or google popular languages in industry)
Pick a handful of them. Focus on one of them for a month. Focus on another for the next month. Cycle through them.
An easy starter language to get over the hurdle of not knowing shit about programming and to get used to the most common structures are things like JavaScript, C#, or even Java. Just stay away from HTML crap when learning JS, The HTML side is the worst facet of JS sadly. (The DOM especially)
Focus entirely on the theory of writing functional code, how commands work, exception handling, the various types of data storage, their methods on working with said data, functions, objects, classes, prototypes, single and multi-threading (seriously easy, fuck knows why people find it complicated, suck less)
Steer clear of weird shit like Python or any other weird language structures and syntaxes. Learn that later if you want to get in to it. But NOT first. Python is not like most languages even in function sans the weird code layout rules.
Equally, another area you can look in to is not just programming languages, but entire suites you can deploy in your business.
There's a lot of jobs for supporting crap like Wordpress, GIT, various other web servers and so on.
Can't hurt to expose yourself to those and learn how different sets of programs interact with code to create a functional service.
There's quite a bit of demand for people in maintaining huge systems like these.
Most of all, WRITE.
Keep a log book of things you have learned. Go over it. Figure out ways to do things on your own. Think of a problem, figure out how to solve it even if the code is terrible. Getting yourself thinking is more important than optimal code just now.
Programming is not so much the code itself, but hugely about problem solving. If you are good at that, you'll have a fun time programming. If you are bad at that, even if you knew every language inside out, you'll fucking hate programming with a passion.
The desire to figure things out, curiosity, this drives a love for programming. Without it, the money isn't even worth the depression and mundaneness of trying to figure out tasks you don't care for.
If all else fails, go buy a pack off Slashdot deals and follow it :^). /shill
My friend did. (Python. ugh)
Understand hardware, understand the inner workings of the PC. After that you'll realize that high level languages are basically syntactic sugar that are sometimes useful but most times obfuscate what is happening down there. I know that this goes against the common theme: learn javascript, learn webscale woot woot now you too can be a hipster brogrammer! Those guys don't know anything. If you know the low level the only problem is that you'll find most high level guys to be pretty limited in their capabilities. Also, you'll be able to learn the latest useless fad much faster when you have a deeper understanding. Unfortunately, you will also see the truth and realize that most languages and frameworks are utter shits written by morons. And that might depress you.
Night classes,knowledgeable instructors, focused curriculum.
Don't fall for this learn yourself bullshit. People who "learned it by themselves" always turn out to be arrogant pricks who think they are the only ones with the answer. The spend their days arguing over what the best language is, what the fastest algorithm is, and going into forums and posting, "Why do you want to do that?" or " have you tried doing this?" instead of just giving you a straight answer to your question or admitting they don't know.
Programming is a tool. It's used in managing a business. As you change jobs you will learn more than one language and you will probably never master it.
"They" come up with new languages constantly and the morons in HR suddenly find they need people with 5 years experience in a technology that's been around for three. And the "new" language is never really new, it's just rearranged. Kind of like Microsoft Office when they just rearrange the menus.
In fact, fuck learning to program. Go into management. Management is what makes the company run. Then you will be the one telling the arrogant pricks what they need to be doing (and that pisses them off no no end). You don't even need to know programming for that. Management is about resources and schedules. If they don't meet the schedule,fire them. if they don't have the resources, that's on you.
If you are truly starting at the beginning and need to understand basic concepts like conditionals, loops, variables, etc I recommend Blockly.
By the time you can solve level 10 of this tutorial you'll have a fair grasp of some fundamentals.
The best part is it automatically converts to JavaScript and Python, two good languages to move on to after you've master the basics.
The answer is of course: Apps. Build more apps. Apps that app, so you can app at work, and app at home, and app while taking a shower.
Hire an AI!
Have you fscked your local propeller head today?
Mostly because it is very easy to start, there are many places to get 'How do you do....X' instruction, and it will translate almost immediately to a skill set you can take with you. JavaScript is not necessarily the best language to learn, but it has many widespread web development uses and has a super low barrier of entry.
"...whenever any Form of Government becomes destructive...it is the Right of the People to alter or to abolish it..."
How about focusing first on what you want to work with? For example.. phone tech? Apple? Android? Do you want to work in a company doing database design and maintenance? What are your skills? Are you good at .. what? Maybe you are a math whiz? It's a hard question to answer so perhaps coming from the angle of what you want to accomplish with that would be the best approach? At your age, you might not have a clue.. but you can start thinking that way..
Have you fscked your local propeller head today?
Watch along with courses at actual University. CS and other subjects.
Berkely Webcast
OpenCourseWare MIT
MIT OCW
Skimmed the CS parts of both programs back in the day. I have a BS in CS from a state college. Found both programs interesting and appreciate the very different approaches to the same subject.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
1. Do the opposite of whatever you read on Slashdot
2. ???
3. Profit
Read the GOF book: Design Patterns, elements of reusable code
It will probably be difficult to get into at first, but it should be doable. It will teach you everything you need to know about whether you want to spend any real time writing code.
2. Eric S. Raymond has a point:
Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.
Lisp is different from most programming languages in that it basically has only one syntactical structure. There's a not-unreasonable argument that this makes things more cumbersome or opaque than necessary for professionals, but as a beginner it's very easy to at least very grasp what pieces are doing and in what order. Get a good IDE to help with the parentheses and show what the function arguments are, and I think it may be a good way to learn how to write structured code without getting bogged down in syntax. Don't spend too much time on Common Lisp's or Clojures' object oriented stuff, though... they are considerably more powerful and general-purpose than almost every other object oriented programming languages and will not properly prepare you for the nonsensical function-method divide, limited dynamic dispatch, and tedious "design pattern" based approaches that most C++ / Java inspired languages use.
3. What job are you at now? If it involves a computer, you might be able to find a use for programming after all. Anything that you think could in principle be automated, probably can be. Work on it in your own time. Don't worry if the tools available suck. Even VBA would probably be fine as a first language, just as long as it isn't your last language.
I would check the job websites to see what languages are in demand in your area.
Why in the hell would you want to?!? You're better off starting a pig farm, or taking welding classes. Programming won't help you one fucking iota with anything. ever.
https://archive.org/search.php...
Download the PDFs here, and type the IBM PC listings into QB64. Most of them will work.
http://www.qb64.net/forum/inde...
Most likely if you haven't got the urge by your 20s to try and control your computer you just aren't going to like it.
.
.
.
Because basically, *any* computer language learnt will be a complement to your skills, albeit only fun or frustration.
You see, the language is only the tool, assignments, loops, statements and conditionals is pretty much all you need to start.
GOTO is considered evil, but then again it's not.
Why haven't you tried anything?
I don't want to proclaim holiness on developers, the mythical art of programming or anything, it's just that I've seen too many people blindly jumping a career opportunity ending up in disappointment.
Start with a goal, the end of which will be something you either need or will be proud of and can show others. Like a personal website or a game. There are many programming paradigms. You can't learn them all. Start with something that will make you feel like you achieved something which will give you the positive feedback loop to keep you interested. That way programming becomes an interest rather than something that you want to do to better your career, earn more money etc. If you do it for the love, other things will follow. I was an electronics engineer who got into programming through modding and game development. If I had gone the route of my peers who learnt to program as a need for the job, I would have hated it and would have been thinking about how to move into management. With my skills and more importantly - interest, I like my job and hence do better at it. TLDR : Start with something fun
All toys are tools. Not all tools are toys, but this may just be dependent more on the user than the tool. If you learn better with Community College go for it, but if money is an issue, you may want to go it alone.
Go sign up for the programming fundamentals class at your local community college.
Lots of people use BASIC, just not VisualBASIC. Want the BASIC most compatible with most of the BASIC code out there? Go for QB64. There's also FreeBASIC, DarkBASIC, and many others.
It depends on your personality. If you want something that's easy to set up or install, I'd recommend learning with JavaScript: it's already built into browsers, and is something often used in the field. Two pluses.
The downside is that it's a screwy language with a screwy type system that doesn't give you very friendly feedback if you do something wrong.
If you like "visual" learning, then LOGO or a variation of may be the way to go. Installation effort and/or cost may be a factor. LOGO is designed for teaching, and so will be overall easier to digest.
If you want to dive into technical details quickly, then take up C.
Table-ized A.I.
Python's a great first language as it's easy to look at, perfect for simple scripts while still being a full blown language, and has a great community. If you decide Python is right for you, I recommend the book "Learn Python the hard way." If you want to get into apps or more complicated stuff, I'd recommend C++ as it's a faster language. And I recommend tutorialspoint online to learn C++.
If you've never programmed before, the first thing I'd recommend is learning html and write a basic web page. Play around with the formatting and css. None of that is programming but if you can't do that sort of stuff, you can't program. If you can do that sort of stuff, you'll enjoy doing it, especially the immediate response.
Then build some javascript functions to run in your web page. That's actual honest-to-god programming and you can easily find tutorials on html, css and javascript. Once you've got yourself started on that, then you might want to look at learning a "real" language like C or C++ or Java but there are reasons you'd use one and not the other and those are why folks study computer science, not programming languages.
By the way, everybody hates javascript, but everyone uses it because it works. In fact, the latest open source web stack is built entirely in javascript.
All that means is that there is one programming job in Missouri.
I feel your confusion. This may be "old school" but I feel it's solid (or has been for me). Start with learning the basic rules.
:D Again, to reduce your learning curve later on, I'd start with C/C++/Java. You'll be glad you did.
A lot of people like Python but because most languages use certain characters to enclose blocks of code (and python only uses indents) I would suggest starting with Java or C/C++. Many here will say Python is easier (ruby is probably easiest for many), but your goal will be to have room to grow. You'll find more languages conform to the C/C++ or Java syntax style rules than Python or Ruby. I find it easier to ready than Python myself.
Do yourself a favor and skip VB.net. If you want pure Microsoft (and I would advise against that, would have saved me much grief early in my career) you can do C# and you'll be better prepared for languages with more platforms.
Java, for example you can use in many enterprise system and embedded systems, including Android. C/C++ you can use for robotic controllers, IPhones (objective-c), real-time critical applications (and gaming!!).
Some may suggest starting with scripting languages like PHP, Python or Ruby. there is faster "joy", but I'd sooner suggest starting with MIT's Scratch https://scratch.mit.edu/ (GUI language for teaching children basic of programming). It's a great teaching tool for anyone I think. Hey, it's still valid basics which converts the GUI instructs into 'C'. the reason
I'm so "hung up" on starting with C/C++ or Java is most newer languages take a lot of their cues from the concepts widely used in C/C++/Java. once you learn one of these (especially C++/Java) you can step into any other language out there with relative ease. Some good sites to start would include:
http://lifehacker.com/five-bes...
Note: These are all free or have free options
http://www.learn-c.org/
http://landofcode.com/programm...
https://ocw.mit.edu/courses/el...
https://ocw.mit.edu/courses/el...
https://www.codecademy.com/lea...
http://www.coursera.org/ (real university level courses, a little intimidating at first, but worth it)
http://www.cplusplus.com/doc/t...
For python:
https://www.python.org/
For Ruby:
https://www.ruby-lang.org/en/
the courses as udemy are a little light so I'd only go there for review.
I've given many options here although I've stated my preference. The other advantage to using C/C++ or Java is they make using these invaluable books easier to read:
Writing Solid Code: Microsoft Techniques for Developing Bug-free C. Programs (Microsoft Programming Series) by Maguire, Steve
Code Complete by Steve McConnell
Yes, these books are from MS and old, but I found them invaluable (and I wish MS had actually practice what came from their own publishing companies when writing the code for W2K and XP). Was required reading at one workplace. You'll want to learn about Object-Oriented approaches as well as syntax. It's a lot to take in and this is just the beginning, but it's fun journey. Oh, I would agree, don't bother with Basic. You are better off with Python or Ruby.
"Imagination is more important than knowledge" - Einstein
The quickest path to become a developer is to learn frontend web skills. Basically HTML, CSS, JavaScript, Angular, React, Node.js and everything related that's most used. Your knowledge of programming doesn't need to be that deep at that level as long as you're able to create websites, basic web apps, and read, debug, and improve other people's code. Then, make as many connections as you can and try to get your foot in as a junior web developer.
However, that won't get you very far and overall, if you have the time, I recommend aiming to become a software engineer. This means really learning core programming skills (take an online CS course like CS50 and learn C), OOP (Java or C#), functional programming (enough to understand it), algorithms, data structures, gang of four design patterns, solid, widely used frameworks, etc. To really learn all of this will require going far beyond the basic syntax which are taught on websites like Codecademy, though you will need to start somewhere if you have no experience with programming at all. I think JavaScript or Python are easiest to get used to and learn the syntax basic, but they are terrible for really learning what I mentioned above. You're not going to learn proper OOP through JavaScript.
There's a pretty good, though perhaps overwhelming, GitHub guide for all of this I recommend checking out:
https://github.com/jwasham/google-interview-university
There are many ways to become a programmer, and you'll hear most of them here.
First off, what kind of programmer do you want to be? Nobody knows everything. Do you want to be the guy at the office who can make spreadsheets sing? Some have said that Excel is the world's most popular language. Do you want to write web games? Database stuff? Hardcore number crunching?
Do you think that you will learn better studying theory, listening to lectures (YouTube is your friend), or just going in live without a net and hacking things until something blows up?
If you want to learn theory, there are two obvious directions (and likely more). C and C++ make you think like the machine; they were built for writing operating systems in, so they are "close to the metal". The languages are the racing cars of programming: incredibly efficient, able to do amazing things, but no automatic transmission, power steering, or ABS breaks. One false move and you go head-on into a wall. Lisp makes you forget about all the silicon and concentrate on abstraction: the more you understand abstraction, the more that any given problem looks like something you've done before and therefore can do easily again.
If you want to learn by playing, Python is considered a good language for that. Java may also be a good language; it's very strict, which means that your compiler or even your editor can catch a lot of bugs before you even try to run the program. Grab some code from online, make yourself a little sandbox where you can't hurt anything (like trashing your employer's database), and tweak it. Run the program, decide to make a change, and look through the code to see how you might do that. If you want to write code, you're going to have to read it, after all. Use some sort of source control, even just tar or zip file backups if you don't know source control, so that if you go off into the weeds somewhere, you can come back to someplace safe.
Choose your first language based on the way you want to learn, not on the language you want to learn to program in. Learning new languages is easy; the basic problem in programming is taking what you want to accomplish and explaining it so well that even a chip made of sand can't get it wrong. Once you get the hang of your first language, the second one will be much easier, as you'll understand the higher level elements of what you're trying to do and just need to translate that into new words.
People who live in glass houses shouldn't walk and text.
If you find a full on professional IDE is a bit intimidating, then start with something like Processing.org until you feel comfortable with the basic language constructs (variables, functions etc). I know when I started out many many years ago, the wall of information you had to wade through just to get some text to print out somewhere was a bigger battle than learning the actual language semantics. I think those of us who know the tools inside out don't realise how intimidating it can be for someone who is starting from scratch and just wants to paint pixels.
I find this question silly, but I get asked it all the time so I will summarize with a story about my nephews.
It is hard to get into coding / programming without an end goal in mind and to drive you progress forward. Let’s face it most of us go into programming because we saw an issue / problem / or hole in our lives so we learned some code, banged out some characters into notepad and complied away our dreams.
Without this drive factor most new programmers lose interest quickly or get stuck in the ‘what is next?’ loop. That is why when my older nephews ask me how to make a website I pointed him at tutorials and books about website design and development. His work is proudly on display on the World Wide Web. When his a little brother ask me how to program I knew he was jelly of this magic powers his big brother had but lack a direction or focus when I sat down to talk to him about what he wanted to build. In stepped Screeps, I had been playing this interesting RTS for a while now. To play the game you need to program the game.
So why Screeps? There are a number of those learn to program games, but most are focused on little interaction and more on the visuals and most only talk basic ideas of how to program but give you no real skills in a given language.
Screeps is game, programming IDE, and driving focus all rolled into one. I would highly recommend it to anyone starting programming as it is fun and simple to get into yet impossible to master. It keeps the student focus and heading towards a goal and provides opportunities to constantly improve your skills and results. It puts it into an environment that you don’t need to understand performance and hardware limitations to start with but as you progress so must your understand of real time performance and memory management.
All you need is a text editor and a browser. It's a C style syntax so it will make transitioning to other languages easier.
Even crappy locked down computers in public schools generally have enough access rights for students to create Javascript programs.
With Google's advancements in JavaScript compiling it's plenty fast and the Canvas concept gives you the ability to make pretty much whatever interests you whether it's simple card games or more advanced graphical games.
Or if you have an actual problem you want to solve, you may need to research more particular solutions.
If you want to do IoT stuff, then the Arduino is very simple to get started with and just requires basic C knowledge to do plenty of things.
Learning is best when there's an immediate need. Picking a random language to start with is generally not the right approach. Pick a problem, then figure out what tools can solve that problem. Pick the ones that are most accessible to you.
People learned BASIC because it was free.
Now everything is free. So that's not an issue.
Work Safe Porn
I'd recommend selecting a language - I think an object oriented language would be a good place to start. Java or C#, both of which are supported in Windows and Linux, would be useful choices. After that, get a subscription on PluralSight (or similar e-learning site) and do some of the beginner courses. If you can afford it, pay for the subscription that lets you download the source code so you can use it as a reference.
It's good luck to be superstitious
To learn programming, pick a problem to solve, then pick a language you'd like to solve it with. Learning programming has nothing to do with the language itself - its just a tool that implements a set of contructs you use to tell a computer what to do. Programming is the art of telling the computer what to do. To clarify, building a house has nothing to do with a hammer, but you use a hammer to build a house, or maybe you use a nail gun. If its a steel stud house, you don't use a hammer, you get a screw gun. So choosing a language is about choosing the right tool for the problem you are trying to solve. Learning C on your own can be daunting - wouldn't recommend it, but have at it if thats what you want to learn. I'd learn on a Mac or on Linux, but not Windows, unless you are writing a Windows program. Swift is a cool language, but is only useful on iOS or Mac (and more recently, server-side development with certain frameworks.) So, I would choose the problem you want to solve, do some research on the best tool to solve that problem, and go from there.
Just don't. Get a real hobby. Something you enjoy. I'll tell you what is going to happen. You will end up learning a little bit about programming, enough to sort of know how it's done but not enough to actually get a job doing it. After years and years of this you will maybe get good enough to get a job doing it but you will watch as those jobs go to fresh faced youngsters with less programming ability than you. Eventually you will kill yourself.
python
I'm in a similarly situated position. I'm a lawyer. I have a bunch of stuff in my email inbox that serves as records of travel miles I can deduct. For a few years I'd spend the hours manually entering this stuff into a spreadsheet monthly. Then I realized that there must be an easier way to deal with it... so I found the Coursera class on Python for Data Analytics, learned enough Python to scan an inbox for the messages that indicated dates of travel, and spent a day hacking together something that would rifle through my inbox, extract all of the travel emails, and dump them into a .xls file.
You need a goal... then research the tools that people think would get you to it.
Got a community college in your area? Almost all of them will have some sort of intro to programming class that deals with the hardest problem for newbies: finding bite-sized problems to start on. Also there's someone who can help you figure out your question as well as answer it.
With any luck they'll let you audit for almost nothing.
Learning programming for programming sake is difficult and easy to get bogged in the infinite set of useless parts of any language. Imagine a carpenter that says they want to master how to use a saw. To be a good carpenter, like a good programmer, requires a collection of tools to solve a larger set of problems. The main issue you will run into is the choice of language but which is a better tool, a saw or a hammer? Depends on the problem you're trying to solve. Nearly all programming languages can be used to solve general problems, but most languages are focused to address certain sets of problems easier than others.
A much better way is to start with a problem, a goal, something that you know that if it existed would make your life better.
If you want to be a game programmer, you might set out to recreate some of the classic games and work your way up.
If you like robotics, put an arduino project together that will require you to program the arduino to respond to sensors, move a servo, blink some lights, etc.
hackaday dot com is a good source of inspiration for hardware projects.
In any case, know that you will never master programming, it's always a work in progress, and you can't learn to use a tool to fix things and solve problems without practicing solving problems. There are always going to be new problems that require new tools to solve, and the best problems to solve are usually your own, as you know when you are done. You also find different ways to think about problems based on which tools you use. Programming for graphical user interfaces is a radically different way of thinking than what's needed to process a video stream, or calculate an orbit. Object oriented design is another layer of thinking different, as is the field of machine learning. Digital Signal Processing, and hard real-time programming (required for embedded devices) requires a different mindset as well.
All that being said, I vote for C as a good choice as it's pretty easy to learn and forms the core of many other languages. I recommend the K&R C Programming book, and make sure you work through ALL of the problems. Then you want to read "Deep C Secrets", to understand how and why C is the way it is. You'll also need someone to show you how to edit a text file, run your code through a compiler, and how to debug problems, as these more practical things are not included in the K&R book.
Good luck!
You can start out with the book: Linux C Programming.
If you really understand how websites work, starting with Javascript might make sense. The higher level, or interpreted languages usually have a little lower learning curve. If you are an analytical type of mind, then starting with C or any of the lower level languages makes you think more about how things really work. At the end of the day all the languages share some commonalities - variables, loops, recursion, synchronous vs asynchronous execution, etc. If you learn the theory behind these, switching languages is relatively easy (not EASY, just more so...). I've been coding professionally for 20ish years now. If I had it to do over again, I would have stuck with C and the low level languages rather than building web based applications in interpreted languages (PHP, JS, etc.). The projects with the lower level languages are more interesting (IMO) than common business needs, and the pay is better. Not to mention you get to use all the information theory you pick up over the years - much more so than with the higher level languages. (again, IMO, and being overly general here for simplicity)
Even with an easy language like Python, it helps to have a guide to get started. I'd recommend visiting http://inventwithpython.com/ch.... The author does a great job of walking you through everything you need to know to get started without any experience. Once you finish with the book, there are a number of great references on the web to take you further.
Not saying it is the best language to get started with but it definately gave me a good understanding of the fundamental concepts of programming, loops, arrays, statements, functions. I got started by taking Stanford's free online Java classes, and then took an actual class at a City College at night. I blogged about my experience getting started with Java here: https://jasoncoltrin.com/2013/... , but I suggest you do the same and write about the things you learn as it will help you retain the info.
Namaste
Go to your local community college and take a fucking class.
Bollocks. Recent versions of C++ are impenetrable nonsense, even for the "experts". Ever seen a compiler error message that's 3000 characters long (on one line)? You will if you use templates heavily on a cross-platform codebase.
Learn something you'll enjoy. Start simple. Move on when you feel hemmed in. Jump around - try different languages (basic, Lua, JavaScript, C, a really old version of C++). Ignore Python (that white space scoping is pants). Don't look at the Linux source code (it'll put you off). Don't listen to old guys.
Regards,
An Old Guy
All of them. And that goes for the editor who posts this shit all too often.
Simply don't.
If learning go for something like Basic, Ada, Pascal. Learn with books that are all about teaching good habits and have lots of educational support.
Then work hard at understanding the steps needed to get data in, have a computer do something and display the result.
If a person has a hobby and wants to create an app to help with some hobby then find some good books on creating apps in 2017.
Learn programming and then look at what is trending in 2017.
Or build an app around todays hardware and enjoy the results of having a solution to some problem.
Domestic spying is now "Benign Information Gathering"
To my opinion, start with Pascal or Modula-2. Two languages well structured, that will force you in learning certain important basics like initialisation. Once you're proficient in one of these languages, a more loose language like C will not trouble you if you keep using the structured way you learned with Pascal. At least that's what I did. Once you get some experience you might try C++ or Java.
-here is another one.
I am assuming something here:
OP is interested in maybe being more helpful at their current job, by learning "programming" in some regard.
Okay then,
First ask your employer what kinds of computer systems they use for management--what operating system, what word processor, what mail client, what mail server and what data bases (local management may not know this). THAT is what your guidance is on what to study using. You want to be able to do things that they can use with the setup they already have. But having them accept any help like that is kind of a long shot, as they won't be excited about running programs from an unknown source (you) on their business computers. You can ask anyway tho. Heck, email the corporate HQ and ask. They might be interested that you're interested.
If you are curious about learning something to get another/better job, then look in your local newspaper for what is being asked for. You likely won't have the degree required, but it will still be some guidance.
Programming skills are rather localized IME... Where I am most jobs ask for Windows, MS Office and databases, databases, databases. Most Windows coding is done in Visual Studio, which means mostly C# or maybe Visual Basic. A bit of server admin stuff/Python/Linux, but not much.... But that's here. Wherever you are may be a lot different.
If you just want to learn to program as a hobby, then start anywhere. All the common concepts of the major languages are available in all the others, and there's tutorials online for everything.
Console programs get boring pretty fast and making Windows programs is fantastically easy with Visual Studio (that is free for non-professional, non-commercial use) assuming you're using Windows anyway...
If you want to learn the deep-down details of game programming, then look at MS's C#, because the DirectX Library examples are all in that language.
If you want to learn Java, buy a cheap Java tablet and download Android Studio (the software for creating Android apps, free from Google). Android apps on a small portable tablet can either be silly games or useful work programs, so this can fit into either [work] or [play] categories very easily.
And finally,
Everyone else who replied to this topic is WRONG!
+1 for Python. It's so portable, widespread and easy to read.
Also, +1 for installing a Linux flavour (Ubuntu, Debian and Mint are all good; they're very popular so there are mountains of resources for beginners)
I would advise against learning a low-level language first, stick with something closer to human language so you can focus more on concepts and principles without having to worry about complex formatting and non-intuitive commands. I originally tried to learn programming with C# and I struggled. I then switched to learning vb.net and MapBasic. Once the basic principles clicked, I found moving on to more complicated languages like C# much easier.
As for content, just find some little task you'd like your computer to do for you and code it up. E.g. I made my own front end for using Robocopy because it was too hard for my less computer literate family and friends to use via CLI. It's easier to find motivation to try, fail, try again and learn if you're invested in the outcome.
I would start with Visual Basic. You could go with C#, but I think the language syntax conventions might make a bit more sense to a beginner using Basic's "BEGIN" and "END" rather than the symbolic characters of C# (and it's easy enough making the transition at a later time.) Microsoft provides a free edition to learn on, the integrated IDE with F1 help and Intellisense make learning the language syntax a lot easier. Also the ability to step forward/backward through code, revise it on the fly, and inspect the contents of variables makes it much easier to recognize what's going on in the program.
If you want to get started with programming, you should probably learn javascript. You have something that can run it already where you can make changes and see visible results. And your biggest problem isn't going to be finding tutorials, but picking ones you want to start with out of the ten thousand available ones.
I don't actually like Javascript, but the people telling you to do something else really have to do more than just wave their hands.
Several here have suggested starting with C, C++, C# or Java. That is one option, but you should know that these languages have rather steep learning curves. Each requires you to learn a lot before you can do much. In the case of C you need to thoroughly understand pointers before you can write meaningful programs and will spend a lot of time debugging which, at a minimum, is discouraging to newcomers. Java requires you spend a lot of time learning its libraries and perhaps 100s of APIs and how they relate before you can write more than just simple programs. All four languages are powerful, but there is, IMO, a smarter way to learn the basics.
Begin by learning data structures and how and when you can use them to good advantage. Learn to program the basic constructs (loops, conditionals, classes, etc) and how to develop algorithms. Integrate those concepts and write a few programs. Use a language that is easy to learn. You don't need to get tripped up early with nuances not related to what you are trying to learn. Numerous books and free tutorials are available.
After mastering the basics it is time to decide in what area(s) you'd like to specialize. What do you envision yourself doing eventually, web development, robotics, financial applications, user interfaces, networking, image processing, cryptography, artificial intelligence, databases, GIS, games, or ??? The list is endless. Learn the languages best suited for that domain.
Personally, I've used 30+ languages over the last 55 years and IHMO, the clear winner is Python. It is easy to learn and your programs will come to life sooner with less effort. At the same time, Python is powerful with rich libraries supporting pretty much anything programming students would want to do. I could go on but the important take-a-way is that while Python is an excellent choice for learning programing concepts and data structures, you need not learn another language to experiment with advanced computer science concepts. Once the basics are under your belt, I would suggest you take the time to become acquainted with C. It will teach most of the other concepts that Python cannot. Between them the world can be your playground.
Learning your toolset is just as important as the languages. Your #1 tool will be your text editor. Find one you are really comfortable with. Learn how to write good comments and documentation. A debugger, an IDE, and a version control system also have their proper place.
After you master the basics you can move into your area of specialty. You should now be well prepared to transition into C, C++, C#, Java, SQL, HTML, JavaScript, PHP, or ??? In fact, some of these languages integrate nicely with Python allowing programs to enjoy the strengths of each.
And remember to come up for air periodically. Some folks forget that.
I'm in my 20s, and have a day job that doesn't require any programming skills. But I want to learn it nonetheless. I have done some research but people have varied opinions.
"Learning programming" is a bit like looking at box full of tools, is a hammer or a saw or a screwdriver best for the job? Well the question doesn't really make any sense until you've defined what you want to accomplish. Unless you just want to learn general concepts, in which case it doesn't really matter. Assign values, calculate values, create functions, acquire resources (like open a file), release resources (like closing a file), control flows like if/case statements, for/while loops, events, state etc. exists in pretty much all languages for a reason, the syntactic sugar may be a little different but the concepts are pretty generic.
Live today, because you never know what tomorrow brings
Being a programer is not like it used to be. In the early days there were only a handful of languages and it was fairly easy to learn them and the computers were not that powerful by todays standards. Nowadays there are so very many different languages all geared to help solve different problems. That is what programming al all about, solving problems. Add to that all the frameworks and API's out there. The choices boggle the mind. The profession is very wide and stretches from embedded devices to mainframes and everything in between. No one can learn it all, most veteran developers have mastered 5-6 languages but there are deep concepts that are found across languages.
The question one should ask oneself is what sort of programming interests you? Web, Application, Mobile, Systems, etc., etc. There's a new field called DevOps where you are a Developer but you are also an Operations engineer. The DevOps lies between the programmers and the production systems. They help bring the two worlds together. Just because it runs on your laptop doesn't mean it will run on the production system scaled out across a thousand nodes in a giant data center. DevOps also helps setup code repositories, automated testing, how things push to production, how production is orchestrated, etc.
Starting with a scripting language such as Ruby or Python might be up your alley as neither requires compiling and both are pretty easy to read and understand. See if you like the idea of coding for long periods of time and banging your head against the desk in frustration. Jumping feet first into K&C ANSI C is a big leap into a shark tank, same with C++, Java, etc. All languages have a place in the scheme of things. It all depends on where you want to go. Pursuing some traditional college classes in software design can tune you into the big picture. It is a lot to wrap your head around everything.
The world needs more developers, go for it. Just realize it's a whole lot of work and the learning never ever stops. You will write code and look back at it years later and scratch your head wondering how you could have been so stupid. It truly is a non-stop learning experience that most talented people get better at over time.
It's very hard to just pick up a book and start learning. 1st, your interest is low so it's very hard to do, and learn from, a programming problem without a purpose. 2nd, you might get past a few examples but I suspect you won't get much retention from it.
So, pick a project. Anything, even if you have to copy what you see online. I learned by writing a text editor. Very, very simple but it helped me to learn. Break it down into the simplest parts you can think of. Ultimately when you program what you are doing is writing directions to a dumb computer to follow. Think of it in those terms. You'll want to describe what screens will look like, what your inputs/output will be. Keep it very simple. As you learn you'll expand on it. To start with, your break down is all that matters. There's no right or wrong. Just do it.
Next pick a language, you can't go wrong with Java or C++. Others will suggest other programming languages but you're a learner and both of those languages have constructs you'll find in many other languages so you're not wasting your time. You are learning now but later you'll be able to pick a language that fits you're needs.
Pick a book. Buy a physical book. Not an electronic book. You get better retention from a physical book plus you'll be able to look up sections easily. As you go thru it, think of your project. How is this useful? Review you're project break down. As you learn you'll be able to better define the parts. Do not be lazy, the brain tends to forget what it thinks is unimportant so pay attention and apply what you learn to your project. Try not to use the book as a crutch for syntax. It's better to remember what you learned rather than copy it to the screen from the book. Especially, don't use cut and paste.
Set a goal, x number of chapters per week. Schedule your learning time too, pick a regular schedule daily. Every day your brain picks what to forget. If you don't use it you lose it.
If you have questions, google it. A great deal of you're questions will be answered. Else find a place to ask it.
The MOST important thing you can do is to work thru the book. At times, you'll be confused and frustrated. It's just part of the process. It's important to know that you'll need to fight to get thru it. It's very easy to give up. Some people might find it easy to learn programming but not all. Think of it like this, thousands have learned to program, why not you. Fight, Fight and don't give up.
You don't state WHY you want to "learn programming". Hobby? New Career? Part-time work? Status? You also don't state ANYTHING about your background, education, or skill set, which seems an egregious omission. I couldn't disagree more with the idea that you should start off learning something as difficult to master as C. Trying to think back to when I was your age, given the amount of time I would be able to allocate to study...Well, the first important point is: you need the equipment to play the game. -or-equivalently: the equipment you have determines the game(s) you can play. To learn programming there are two basic ways to go: 1. Use your own equipment (computer and software) or 2. connect to software "on-line" or "in the cloud". Since Windows is the dominant PC operating system, I'll assume you have a Windows box. OK. Well, given that I'd suggest you buy at least 3 beginners books (they typically go for around $40 - $80, but consider used.) and download and install Microsoft's Visual Studio (it's free) and learn C-sharp = C#. Alternatively, the easiest approach would be to use a scripting language such as Java (the top language for the last 5 years) or Python or Javascript or one of the other top languages. One way to decide is to see whether you can find 3 tutorial books which are recent and applicable to a version of the appropriate language version that is no more than 2 years old...maybe 3. Read the reviews (Amazon) and see which seem most attractive to you. But this really depends on your goals - learning to program games is much different than learning about accounting databases. What you should expect is that there is no one language which will teach you all of what you need to know to be a competent programmer - you'll eventually have to learn several (with different strengths and weaknesses (and they all have frustrating weaknesses) plus -not to rain on your picnic - professional programmers now days are small cogs (for the most part) in large machines - your professional scope will be much much more focused (and less fun and higher pressure) and limited, should you want to get paid to program (eventually). Most programming now days involves using (and modifying) other people's code which means you'll need to learn good manners (which vary from language to language) and to rapidly grasp the structure of other people's code. That's one reason I suggest you work thru 2 or 3 books simultaneously.
> Not all tools are toys
My wife would disagree!
(this comment intentionally left vague)
Find a tutorial that seems to blue print what you want to do. Carry through hours of effort to realize that the instructor has left out a key fundamental that is not apparent. Repeat the process with ten more tutorials before finding your solution. Realize a constructed education from a institution is key. Realize everything you have learned is now dated in your industry. Find a tutorial that seems to blue print what you want to do. Become the rabbit and own the hole.
I teach Scratch to children. I love it. Nothing else I have seen will have the beginner creating actual programs easier and more quickly. By the time you have finished the first tutorial you have created a program with animation and sound, and that success is a lot of encouragement compared to "Hello, World!"
It doesn't need anything to be installed. It works in a web browser. So easy to get going. But needs flash. There are so many "I hate flash" comments in slashdot but I think Scratch makes it worth having a flash plugin.
scratch.mit.edu is where you find it.
Saylor Academy.
Introduction to Computer Science I
Introduction to Computer Science II
Totally free. Learn at your own pace. Vetted by faculty at actual institutions of higher learning. You may even be able to get credit.
This is a very well made introduction serie by Nick Parlante. YouTube: https://www.youtube.com/watch?...
SeqBox
C is an interesting choice for your first language, it will certainly color your experiences later by learning some concepts that are abstracted away by other languages (pointers, memory management). I would recommend "The Joy of C" - you can still find it used on Amazon, etc. - it offers a bit more of a gentle entry then K&R and by then end of it you WILL be a coder.
Java 9
https://jdk9.java.net/download/
Even for the intelligent, gaining any kind of skill at all requires effort sustained over a lot of time. Being an introvert and obsessive helps to do it for its own sake.
If you don't have those qualities, you need to have a really good reason to learn, a strong motivator with a clear goal. Without that, you're wasting your time.
That being said... here is the tool I universally recommend to beginners and experts alike, to learn a new programming language.
Pick your poison, start at problem 1, and work your way up.
Oh and for god's sake, don't use C.
Read "The Little Schemer", and then "The Seasoned Schemer". Then read "Learn You a Haskell For Great Good", Typeclassopedia and Bartosz Milewski's videos. Write lots of code on the side. Rise above syntax and environment. Don't get into petty debates, opinions, and trends of the day. Avoid people and love automata. Perhaps one day we will discover we are automata too.
Heroes die once, cowards live longer.
Select a language based on longevity & safety 1st (read what I wrote to Linus Torvalds regarding C, it's truth https://developers.slashdot.org/comments.pl?sid=10204455&cid=53806455/ )
Then, select an area you are interested in programmatically (if not some area in your life it can improve OR augment) - because INTEREST in your subject is what keeps you going so you don't just quit/give up...
APK
P.S.=> I was YOU once, I know the feeling - the above kept me going (even AFTER I retired circa a pretty successful FUN career as a programmer/analyst-software engineer MOSTLY circa 1994-2008) & I even do THIS project, protecting users + "the 8th wonder of the world" imo (the internet itself) via APK Hosts File Engine 9.0++ SR-7 32/64-bit created in Object Pascal/Delphi (no string problems like C has per the link above) https://it.slashdot.org/comments.pl?sid=10205115&cid=53815699/ ... apk
Magnet, needle and a steady hand. What more do you need?
Website Just Down For Me? Find out
EWD 316.
... based on job postings, Ive read are SQL (50k), Java (44k), JavaScript (40k), C# (25k), Python (15k), C++(13k), and PHP (10k).
Each is used for different things, so depending on whether your goal is to have best job security, or most enjoy what you do, go that way.
SQL is for working with databases (never learned it, sounds boring). Java lets it program for most anything, most notably Android. Javascript is on many web pages. C# is a solid way to program Windows GUIs. Python is good for a quick script to download data and try out an algorithm. C++ is used when your goal is speed and raw bit access. PHP, I honestly have no idea, but Im guessing its best at something.
Personally, I find Java and C++ best, because I like strongly typed variables, and not being tied to Microsoft. C++ is easiest to typecast a raw buffer to some complex structure, but it probably has the most pitfalls of the strongly typed languages (for the exact same reason.)
Hard to go wrong with Java, its used nearly everywhere, and the skills you learn there will make C++ and C# pretty easy.
https://en.wikipedia.org/wiki/List_of_educational_programming_languages#Languages_by_age_and_experience
Haskell, Oz, Scheme, Squeak, NetBeans BlueJ, Python
You can easily find tutorial/lecture/ebook materials for them online.
Learning to program and learning to program a specific language are two entirely different things. Generally avoid looking for "Learn to program C" books and instead look for "Learn to program using C" books.
.NET which is very similar to the Java infrastructure but properly supports dozens of programming languages with a great base set of libraries. C# as a language is very feature rich and while it's possible to write truly horrible code in it, it's also very easy to make very clean and good code in it. From within Visual Studio or Visual Studio for Mac, you can code natively for all major platforms and Microsoft also has good quality moderated forums that means when you have questions, you get help from constructive people more often than from trolls.
There are clear differences between programmer and educated programmers as well. Anyone can learn to program fairly quickly. Possibly using some of these "hour of code" projects you'll find online would be quite effective. What you really need is something that will kick start you and get you coding in something that will allow you to make things.
I highly recommend against using system languages like C to get start programming. While it's definitely possible to make a program that adds numbers together and displays the output, writing an type of application with a user interface on Windows, Mac or Linux using C will require understanding complex memory management topics. In addition, on Windows, you'd use the Windows API, Linux you'd probably use GTK+ and on Mac you're basically screwed as you would need very complex systems like Swig to expose the application development API to C. All these systems require a fairly strong understanding of programming in C before you even consider using them.
At this point in time I tend to recommend for simplicity using Python as a starting point. The drawback to this is that Python is an incredible language but it has evolved into one of the ugliest systems as there seems to be no control over the trash that can be contributed to the libraries surrounding it. In some ways that's precisely what makes Python ideal as an option. When you code in Python as long as your indentation follows the rules, absolutely everything else, no matter how bad it might be is considered perfectly good Python programming.
There are programming generations as well. Languages come and go. There is always on dominant language used by the most people due to the "anything goes" mantra which draws a lot of learners and hackers. It was BASIC, Pascal, Visual Basic, Perl, PHP and now Python. Python is special because you can actually do the right thing in it if you know how. It can actually be used as a real programming language. The main problem is that most people contributing to it don't know how.
I personally recommend that people learn to program now using C#. The reason is that it's a balanced language that offers a bit of the best of all worlds. Using C#, you can write an operating system (except the initial boot code), you can write a state of the art video game, you can write a business system etc... while many languages can do this, C# is fully supported (with GUI) on Windows, Mac and Linux as well as for iPhone, iPad, Apple Watch, Android and Windows Phone. The learning curve to developing for most of these systems (with GUI and user interaction) is substantially lower than when using something like Swift. Swift itself is a fairly ok language, but while it's open source, it isn't terribly useful for anything other than Apple programming and it's main selling point is "It's not Objective-C" and yet borrows a bit too much from Objective-C.
C# is a great tool as unlike other languages, it's part of a proper infrastructure focused on compatibility, evolution and portability. C# is based on
Some people mention Java. The problem with Java is generally lack of platform support. Java works great on Android, but on Windows, Linux, Mac, you have to use the JVM which causes constant pain to the user
Warning: Wooden screwdriver handles can result in splinters.
Buy Knuth's books. The Art Of Computer Programming. The first three volumes should suffice for now. And buy a box of pencils and some paper.
The virtual MIX machine Knuth teaches with doesn't require anything electrical to operate and learn with, unless you're indoors or it is the evening, in which case an electric light will be required.
... are probably the best way to start. Python is the only PL that is used professionally in all industries. It' s also modern and easyto learn.
Good luck.
We suffer more in our imagination than in reality. - Seneca
Start with the philosophical musings of logic, then trigger your knowledge with transitional steps to a unified thought process.
Then the how
Not one mention of Perl from anyone! WTF? The most obvious steps to becoming a master:
(1) Learn Perl - hack together something quick and dirty; gather bad habits like flies to shit
(2) Re-learn Perl - obfuscate everything and do everything you did before using 80% fewer characters and no white space; add more bad habits to your toolkit
(3) Use Win32::OLE - Create fully obfuscated (and completely undecipherable) Perl that can completely automate all tasks in MS Office; Replace all VBA code in your organisation with code that only you can maintain ever.
(4) Profit
You and your faggot shit programmers are spying on us with your bloated buggy back-doored by the chink mother fuckers code and compilers you abuse
You people fucking suck. And you lick the anus and balls of fuck scum like Bezos, MSFT, and Google and other EVIL, VIOLENT liar companies.
You took your PAY FUCKING JUDAS. YOU FUCKING SOLD CHRIST DOWN THE RIVER FOR 30 sheckels you FUCKING CUNT! tsarkon!
Many people advocate you should use $LANGUAGE and that $LANGUAGE is the best language to learn first. But really, the first thing you should do is find out some program you wish to create, and then choose the language accordingly.
Do you want to create a web application? Learn JavaScript and maybe PHP / Java / Python.
Do you want to create an Android App? Learn Java.
Do you want to create a desktop utility application? Learn C#.
Do you want to create a command line program? Learn Python.
Do you want to program a microcontroller? Learn C, and then Assembler.
Each language has their own pros, and cons. If you just want to learn programming for the sake of programming, then there are four languages I recommend:
Python for it's non-intrusive syntax and enforcement of indentation order.
Java (or C#) for it's enforcement of Object-Oriented Programming.
C for the way it forces you to deal with pointers and pointer arithmetics.
And finally, JavaScript for the way it forces you to think asynchronously (e.g. threads).
You can start with any of these, but don't get stuck with a single language in the end. That said I suggest starting with Python, but it's up to you.
systemd is not an init system. It's a GNU replacement.
One thing I wish someone told me when I started out is that every programming language requires a specific development environment. Depending on the language this can include the compiler/interpreter, runtime environment, libraries, a language specific package manager, an IDE, various command line tools as well as plugins for other software. Hell, even the OS plays a role in this! Each of these components often have several flavors to choose from, so for any one language there can often staggeringly many possible development environments.
Personally I found that for the programming itself, there is usually ample guidance online in the form of manuals, documentation and Q&A sites like stackoverflow; my impression is that usually the development environment - being less canonical and more personal - is less documented, although usually there is some guidance about setting up a basic environment. So I would add to all the other good advice here that it is helpful to investigate the nature of the development environment in order to have it correctly set up to suit your personal preferences, much like arranging your workbench to your liking before crafting your widget.
Personally, in this context, I was recently very happy to discover the Nix package manager and NixOS, which allow you to create configuration files which define environments (for development or otherwise). This means you don't have to repeat a bunch of installation commands for every machine you want to develop or execute code in.
Hire illegals.
It is a perennially good subject to fight overr - engineers always enjoy fighting over programming languages and -style, I know.
At the end of the day, only you can decide what is the right way for you. My advice is always to start from why you want to program - what do you need it for? That will help you choose the language, among other things. Don't worry too much about it from a (learning-) resource perspective - the most important thing is to be motivated enough to go and solve the problems you inevitably run into.
If you are strongly motivated and like solving problems, go for C. The syntax is very easy, but there are many pitfalls and no safety net; you will learn a lot about programming that way. C is also the inspiration for a large part of more modern languages - like Java - so you will feel somewhat familiar with the syntax in many languages.
If you want to write code that does a lot, and you are not too interested in GUI stuff, then perhaps python - it is a very well constructed language with loads of useful libraries, and it is easy to learn. You can achieve very satisfying results with simple code, and there are loads of advanced features, if you want to learn them along the way.
Swift I don't know at all - my understanding is that it only exists on Apple's systems, and specifically on iPhone, and to me that signifies the end of my interest. It may be a very good language - most modern languages are well thought through - but the world of iPhone is just too small for me.
Lazarus pascal is a good place to start. Even though I had been a mainframe software engineer for over 40 years, I learned to program PCs using pascal. But as someone said, C or jave might be a good place to start if you are looking to move into programming for a living. The newer languages are not going to be in that much demand, so go with the most popular. I have never purchased a book on any language. I self taught myself IBM assembler and Cobol to get into the profession by looking at code examples and asking other programmers questions. Coding forums are abundant on the web. Some programming news groups are still good. Learning to program by example is a huge shortcut to mastering code. Even after learning to code, you still may have trouble getting a programming job without experience. I had to start in computer operations. After expressing a desire to move into programming in one company, only to have them say 'Nyet!', I moved to another company and was promoted to programmer from operations after 9 months.
Hi, you may never read this as you will probably have to wade through 3 feet of shit infested talk about american politics, but if you do this would be my advice. As someone who has learned coding while not being a programmer this has been incredibly useful to me in my career. Just because we are not "professional" programmers it does not mean that we don't have problems to solve for which small programs and scripts can work wonders.
If your goal is to become a full time programmer then you will probably have to learn multiple languages. The best programmers have a whole set of tools they can use and should not be boxed into one language. You still need to start somewhere though and I don't think it really matters as long as you start. More importantly learn how to think like a programmer, breaking down problems, understanding the problems you are trying to solve. Syntax will be a bitch when you start but don't get too down if you struggle with that.
If you just want to pick up a language to increase your career skills I don't think you can go wrong with Python. It has a vast community, is probably easier to learn than anything out there and has an incredible about of libraries that you can import and use in your own scripts and programs. If you are looking to make programming a career you will want to broaden your horizons beyond just the one language. The important thing is to pick one and stick with it.
There are tonnes of good resources for getting started with Python. Beware that the arguments around which are best is a bit of religious war in the community with strong opinions for and against each. (examples: Learn Python the Hard Way, Automate the Boring Stuff, Code Academy etc etc). I have a clear preference but will not recommend one. Research it, read the flame wars, try them all, use what works best for your learning style. That is really the heart of it, we all learn differently so you should be suspicious of anyone who says this or that resource is shit and only idiots use it. They are most likely the idiot.
Good Luck
A lot of the other responses here focus on what language to choose, but not what to do with it. So pick a language - Python is good, Ruby is good, PHP if you want to work with web sites, C# if you want to work with Microsoft stuff, Swift if you want to work with Apple stuff. And then:
- Sign up for a free Github account (https://github.com).
- Start working through the Advent of Code challenges. (http://adventofcode.com) They're a set of 25 two-part challenges posted in December 2015 and then another set in December 2016. I recommend starting with the 2015 set (because I think it was more straightforward). The reason I suggest these are that they are problems with specific solutions (you'll know when you get them right), they will make you learn how to solve problems in your language of choice, and there are a lot of posts on Reddit (https://www.reddit.com/r/adventofcode/) with tips for each individual challenge. There are other programming puzzles out there, but Advent of Code is a good collection of challenges in one place.
- Post your solutions on your Github account. This will get you familiar with using Git. It's a good skill to have.
- Tweak your solutions if you'd like. Find a way to write more concise code? Want to practice documenting better? Interested in optimizing your solutions to run faster in less memory? There you go.
- If you ever want to use your new programming skills for a job, link to your Github repo from your resume. It will let people clearly see how you code.
Good luck!
Seriously, don't ask programmers what is the easiest way to learn, they will tell you their favourite language or what they think is a simple language but that's not the question. In general the easiest way to learn anything is to take an introductory course on it. For programming there should be plenty to choose from wherever you are, even online ones are fine for starting out. But make sure it isn't a language specific course, just a general introductory one where you can learn some basics and maybe decide if you actually care to learn more.
You can ignore all the new C++ stuff because old code will still compile just fine. I would wager real money that half or more of the active C++ coders don't know a damn thing about the C++11 changes and probably never will. You can go your whole career coding in C++ like its 1997 if you like.
Language doesn't matter if you really want to learn programming. If you want to learn to how to do a specific programming task, like write a file, download a file or whatnot, then some languages make this easier, or make more sense than others.
If you want to learn the theory, organization, and thinking skills required to program in really any language, for just about any task, start with the very basics. Learn how to organize data into records or structures, and then learn how to perform operations on these structures. Once you learn the basic kinds of structures, and the basic kinds of operations each structure lends itself to, the rest is pretty much a language-specific iteration of these same patters, with the goal of eventually accomplishing the task.
If I may recommend a book (link below) called Data Structures + Algorithms = Programs. In this book, a psuedo language is used to demonstrate the different "standard" methods of organizing data, as well as the different operations each method of organization is good at. At it's core, doing any task in any language is just really a combination of these techniques. Sure in some languages you may need to allocate the memory for a list element, while in others you just instantiate a class that implements a pre-written list element, but they are all the same thing in the end.
It's like learning to program from the inside out (starting from basic theory), rather than the outside in (starting from the features of a given language).
https://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189
Thank you very much! Flavianoep. (Posting as AC not to use my carma.)