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?
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.
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++.
Although I started with BASIC myself, I wouldn't consider it an ideal starting place for people today.
For one, no one uses it. Even most die-hard Visual Basic programmers use C# instead nowadays. BASIC is too dissimilar from most other languages to be a good starting one anyway.
I'd start with Java or C#. Both easy to use, both use fairly common skills that will translate to other languages easily. Both are employable languages. If you don't mind being Microsoft's biatch C# has the nicer IDE to get developing against- but you're pretty much guaranteed to be doing purely windows based stuff. Java gives you the opportunity to work on anything.
"That's the way to do it" - Punch
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.
At this point I would skip on BASIC simply because there are so many fewer real-world applications for it. I would start with a conventional shell scripting language. On a Windows box that would be batch files, on a Linux box, probably bash. Both have direct applications in addition to being functional for rudimentary understanding of programming.
In my own case I grew up with a computer with MS-DOS 3.3 and GW Basic 3.22, and I spent a lot more time in MS-DOS batch files than I ever spent in Basic. Granted, my application for them in setting variables and then launching programs doesn't apply a whole lot these days, but some file processing can be handled with it.
I am not going to express an opinion about Power Shell from Microsoft because I have no experience with it other than coworkers raving how great some new feature to them is, when we've had that feature in bash for almost 30 years, so my judgement is admittedly tainted for the negative.
Do not look into laser with remaining eye.
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.
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 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."
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.
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.
> If you don't mind being Microsoft's biatch C# has the nicer IDE to get developing against- but you're pretty much guaranteed to be doing purely windows based stuff.
Did you miss Visual Studio Code altogether? No, not the full-blown Visual Studio, but Visual Studio Code. The IDE runs on Windows, Linux and Mac, as well as the apps you write with it.
https://code.visualstudio.com/
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
I would start with a conventional shell scripting language. On a Windows box that would be batch files, on a Linux box, probably bash. Both have direct applications in addition to being functional for rudimentary understanding of programming.
I run Linux and I am NOT a programmer or dev of any sort, but even I have made up a few simple scripts here and there with the help of the Google to do various things.
I've played around with turtle graphics in Python too, but that's not as useful as even simple bash scripts can be.
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!
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.
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.
Or use BASIC to learn about a different programming language. I never got any of the BASIC Computer Games (see link below) to work on my Commodore 64. Fast forward 30 years and a taxpayer-funded A.S. degree in computer programming, I started translating the BASIC games into Python to learn more Python better. A very educational experience.
http://www.atariarchives.org/basicgames/
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.
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
That's so 1990's. Here's an updated Linux book. Enjoy!
http://www.linuxfromscratch.org/lfs/
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.
> Don't fall for this learn yourself bullshit.
That's anecdotal. Most developers learn on their own. A formal course is fine, especially if it's a full CS degree, but for many like the OP (already in their 20s and likely already invested a lot into another degree), the time and money required for that makes it difficult to justify. You're also making a bigger gamble. If you discover you do not like programming after investing a lot of time and money into a formal degree program, you're stuck with more debt. Learning on your own allows you to quit at any point you realize you hate it and be out much less time and money. That said, you still need to cover all of the ground that is covered in those college courses (except unrelated courses and advanced math courses). You can't go through a couple basic Udemy courses or Codecademy and think you're job ready.
I would check the job websites to see what languages are in demand in your area.
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.
I had exposure to computer programming as a teenager in the 1980's but wasn't interested in being a computer programmer in college in 1990's. I graduated with A.A. degree in General Education. After I was video game tester for three years, I went back to school after the dot com bust in 2001, got an A.S. degree in computer programming and went into IT support contract work. Today I'm doing InfoSec in government IT. I'm 47-years-old, making $50K+ per year and living in Silicon Valley. I'll do something different when I retire in 30 years.
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
If you are working on a windows domain in a windows world then power shell gives you some very nice tools that just weren't available previously all at one prompt and it has made a lot of advances since the first version. I don't know if it would be appropriate as a starting point for learning to program.
It really depends what you intend to program.
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
Yeah. That was another reason I suggested bash, because syadmins that are not programmers still can use scripting languages to assist in their work.
I have to take care of thousands of devices. Being able to use scripting to even do things as rudimentary as retrieve serial number and hostname information for inventory control purposes is quite useful as I can make scripts that parse retrieved lists of IP addresses to just get in, get what I need, write that to files, and move on to the next.
Being able to automate backups or other similar tasks through cron also has value outside of the programming arena.
Do not look into laser with remaining eye.
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.
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.
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.
I wouldn't recommend using the C64 as such (and I assume it was a joke). That said, if you're beginning programming, it might not be a bad idea to begin with a beginner's programming language. If you're running MS Windows, perhaps have a look at MS Small Basic. It's a modern beginner's programming language, and there are tutorials and example programs for it.
Not everyone starts with BASIC. I actually started with PL/1 (and don't remember any of it). Why PL/1? Because that was what was taught in the intro course for non-engineers (the sections of the intro course that started with FORTRAN were for engineering majors only),
Geology - it's not rocket science; it's rock science
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.
we used to get some of the worst coders in some places that started their career with VB 5.0/6.0. So many bad coding habits. Although VB.net is infinitely better, the very word "VB" sends shivers down my spine. For Ms, C# all the way. :D (sorry VB guys, I had to rewrite too much of your code..). Three cheers for "option explicit"!
"Imagination is more important than knowledge" - Einstein
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
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
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.
Blowing the seven shades of shit out of Russia? I'm not saying it's a bad thing per se, but I don't see how that'll help learn programming.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
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.
The difference being what drove you to learn to code. If you haven't learned to code by the end of high school, give it up. You have the same chance of being a good coder as someone picking up a violin at the same age has of playing in a major symphony.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
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.
This is a very well made introduction serie by Nick Parlante. YouTube: https://www.youtube.com/watch?...
SeqBox
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.
"The software may collect information about you and your use of the software, and send that to Microsoft."
Magnet, needle and a steady hand. What more do you need?
Website Just Down For Me? Find out
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
Linux from Scratch? Does that mean, umm, that I can build a linux system using the Scratch language on my Raspberry PI?
Oh, and I looked at the webpage and there was stuff about systemd on there.
From scratch? Really? What's the bootstrap process for that?
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
BASIC is a reasonable starting point, but you don't want to stay there long.
For a beginner, you want a forgiving language, something that will almost always run and not be picky about data types. Something that doesn't require "includes" and linking instructions to the compiler. Stay away from old, primitive languages with weird formatting requirements, like FORTRAN. Interpreted languages are good, but I don't recommend shell scripts because the documentation is usually inadequate..
Once you've got the hang of making a program run and having it do what you want it to, leave BASIC behind because it teaches bad habits and has serious limitations.
If your mindset is engineering, C is a reasonable choice. Otherwise, try to find a language that fits what you're trying to do and doesn't have peculiarities that make you angry.
Contribute to civilization: ari.aynrand.org/donate
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.
However, it hides many of the basic but elementary constructs from the user. You may not want to write your fourteenth sorting algorithm, but for someone who's just starting, making bubble sort work is a learning experience.
I'm still looking for a better beginners ('kids') programming language, that still uses basic control structures (if/then/else, loops, etc) and has some graphics functionality (primitives like lines, boxes, circles) ready to use. Python either requires extra modules or dealing with tkinter for the latter.
Just change the default settings.
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.
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!
What's the bootstrap process for that?
An existing Linux environment. I typically install Xubuntu into a Virtual Machine and work from there. This is similar to how Linus Torvalds bootstrapped Minix while developing Linux.
I tried doing LFS and got to a point where one of the steps didn't work, and there was no information on what might be wrong or how to fix it.
Google is your friend. Someone else has probably ran into a similar situation and found a solution.
I expected LFS to be better because it's intended to educate, but it's just another cookbook of code concoctions.
If you actually read the LFS book, it will tell you that getting stuck is often the result of missing a step, ignoring error messages or a bug in the documentation. LFS is not for the faint of heart. It took me six attempts before I successfully booted my completed LFS installation.
I can't remember the actual problem that was the show-stopper - it was several years ago, but I re-did everything from the beginning three times and still got stuck.
I did it in six attempts. Keep trying.
If I have to RTFM for every little thing, why use the book?
Because the book isn't an encyclopedia that explains everything. If you get stuck, back off for a while, ask for help and/or start over again. If you find this too hard to do, download a Linux distribution and be done with it.
Pick up an instrument/compiler/(anything requiring dedication and time to 'master') anytime you want. But understand the 'self selection' happened decade(s) ago. You don't learn now, like you did at 10, nobody does (obvious exception).
The kind of person that waits till age 2$ to start, is very unlikely to get good enough for public exposure. It happens, raised Amish and never saw a computer, or raised Baptist and not allowed to dance etc. Rare exceptions, people take to 'it' like ducks to water, first chance.
I can't put on toe shoes and ever perform non-cringe worthy ballet...HornWumpus performs 'Wrenched Back and Spasm, Crawling to Liquor', improvised modern dance. Some might laugh, but the dancers would just shake their heads and walk away, perhaps render first aid.
John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
From the License:
"The software may collect information about you and your use of the software, and send that to Microsoft."
Telemetry is built into so many things now, it's a losing battle. Do you have a phone? With an app installed? It's tracking you more than VSCode ever will. But you keep wearing that tinfoil hat, and we'll keep doing what the aliens tell us with their brain rays. :)