So I'm going to begin learning some coding and I was thinking C++/Python/SQL...

So I'm going to begin learning some coding and I was thinking C++/Python/SQL. I don't know much about coding so what does Sup Forums think the most job-prospective language is? What do you think the most important theory to learn is?

Any other tips for a newbie coder? Good YouTube tutorials, online courseware? General comments?

Other urls found in this thread:

youtube.com/watch?v=rBDwETS_jbw
gamasutra.com/blogs/MichaelKissner/20151027/257369/Writing_a_Game_Engine_from_Scratch__Part_1_Messaging.php
twitter.com/SFWRedditGifs

>what does Sup Forums think the most job-prospective language is?

Depends on what type of job you want.

Realistically, there are two ways to learn to code. One of them is the easy way, the other is harder. Both get you a job, the hard gives you more choices about what that job is.

I define long term as being roughly:

>In two and a half years if you're doing this in some of your spare time, you could get an entry-level CS job, or you can do it in one year if you drop everything besides your job/school and just study.

The short term is about six months of semi-focused part time practice.

>For both the easy way and the hard way:

Language is irrelevant when new. You need to build some fundamentals that apply to all languages. In all cases you need to understand:

>Control flow, variables, arrays and strings

Basically, logic changing how you progress through a program (i.e If (a), do thing b), and the things that logic acts on. Learn by going CodeAcademy and working through any language for a few days.

>classes, constructors, and class functions; i.e, basic OOP

Modern programming thinks about things in terms of object oriented programming, which pretends your code can model an abstract-but-real thing. You do this with video games if you talk about "enemies" - bats, bugs, and monsters all are enemies. These gives tools to tackle big problems.

Find an intro course in your language on OpenCourseWare and work through their on-board and, if available, homework problems in this topic; I guarantee it will be covered.

>Data structures and algorithms; big O.

Doing things isn't enough. Modern programmers are expected to do and store things efficiently, and there are fast and slow ways to solve problems. The way you learn these ways is to practice. Find videos about this on OCW/youtube, and by reading Algo textbooks, working examples, and writing proofs of correctness. Cormen is good (though he wrote a brick). So is Kleinberg (though he'll kick your ass)

(1/2)

>SQL

You what

In my industry, C++ and python are the two popular languages.
C++ if you require speed of execution, python if you require speed of programming.

Tips for beginners would be to make a plan.
Sketch out a plan for yourself of something you want to make.
Then break it down into tasks which you can then learn.

In the beginning, there will be so much stuff you have to learn, so break it down into smaller parts will help you focus.

Oh, and use cmake.
A lot of people learn cmake too late, you will have to deal with it eventually and it is something that can waste a lot of time if you don't do it correctly.

HolyC , much better than C and cpp

If only there was a general thread where you could ask these questions...

wow. WOAH! we have a HACKER over here!!!

youtube.com/watch?v=rBDwETS_jbw

Python
C
Java
Haskell

in that order

>Python ever
U wot m8

(2/?)

>A specific language that an employer wants

At this point you should have strong fundamentals. You'll notice I never mentioned what language to use because it doesn't matter. Every modern language uses the things above.

Only now does it actually start to matter what language to use, because that affects the work you can apply to. At present, with these skills, to get a job, you are qualified to:

>learn Java or C# for big company back-end work

These build big application back-ends (the logic that makes them work), and every company is using one of the above two. Logic heavy, algorithm understanding is all that counts. Textbooks exist, but googling for a data structure's name in a language will give results explaining for basic algorithms like sorting and graph traversal. Solve a number of practice problems until you're comfortable using these language constructs.

>Learn HTML, CSS, Javascript, Jquery, and a web framework

These build big application (and small application) frontends, which is what you look at on a website as a user. Good if you like design. Less logic heavy. Free Code Camp is amazing for this. it provides a laid out path for you to learn the languages with practice problems built in.

>Read Cracking the Coding interview and go on leetcode, solve problems for 2-4 weeks

These give you skills to pass programming interviews. If you cannot pass them, you cannot get jobs.

>EASY PATH TO LEARN CODING STOPS HERE.

You actually have all you need if you made it to this point and really understood all things along the way to get a job. If you know DS&A, Big O, OOP, the big picture basics, and know either of those things, you can find work. Everyone has a website, everyone has a backend for that website. Start applying here if you want, you'll get jobs.

>But I want to learn/make more money/make video games!

Cool, welcome to the hard way to learn programming. Let's get deeper.

>doesn't know how to code

>Scripting language
>code

Go to www.udacity.com, probably the best resource for beginners and much more engaging than meme websites like code academy

Not OP but I'm curious to see where this goes.

(3/?)

The above fundamentals will get you work, but leave out nuance. How can I improve more? What actually is happening under the hood? How do I debug a program when things go horribly wrong?

The hard part is picking up this skill. There are no more straight paths, but leaves. Get deeper into topics you find more interesting, but in all cases, start by:

>Learning C++ or C in depth.

C and C++ abandons things like garbage collection (deleting things you no longer need), forces you to almost always explicitly declare types, and forces you to learn pointers, which is how objects actually interact. Higher level languages like python and java hide a good deal of complexity from you, but this hiding slows down your programs. Learn these topics by googling, and then use them to solve DS&A problems, from scratch.

>Learn systems level computing

Your computer is basically a CPU doing logic, several I/O devices like a keyboard and screen, and some memory manipulating electrical signals. These can be modulated by an appropriate series of bytes, or 1's and 0's, through machine language the computer understands. This is translated from assembly language you can understand, translated from a programming language you write in.

Learning assembly language puts you as close to the metal as humans have been in many years. It also teaches you how programs work. It will also teach you how to avoid security flaws. Read Computer Systems: A Programmers Perspective 2nd Ed. It is unparalleled.

>Learn parallelism

Computers have multiple cores to solve single problems. Put them to work, and you're dividing the time to solve the problem by the core count, roughly. Read Computer Systems: A Programmers Perspective 2nd Ed.

>Learn more domain specific things:

The above is a very job oriented guide to learning programming, and I could keep going. These extra things immediately set you apart from the herd. I'll finish with domains you can go deeper in at this point.

Python, then C if you want fundamentals, then C# or Java for employability, then whatever you want (e.g. Lisp or F# for functional).

Thanks, code academy was fucking awful for me.

(4/?)

The above taught you how to program faster and understand the box you're working with, which is what separates you from average programmers and gives you freedom to start looking at more interesting work.

Here's some knowledge domains you can get deeper in:

>Backend, but more so!

Web apps store into databases.

Web apps require a server which serve contents to connecting clients.

Web apps need hardening in the modern era security-wise to prevent hackers from breaching. If you liked CS:aPP2E and all the DS&A problems you've done, this is where you're going to want to go.

If you can't tell, large-scale backend logic and frontend has formed most of my experience, and I've given specific recommendations for how to get a job and learning resources within each topic domain related to this. That won't be continuing for many further areas.

For the rest of the post, and in one more, I'll make you aware of problem domains you can choose to work in besides, though I'm substantially less informed from this point on.

>Functional programming

We've talked about OOP because it gets used a lot in workplaces, but this is not the only end of the programming universe. Functional programming treats programs as manipulating data (including other programs as data), and is an entirely different way of thinking about problems. I've heard good things about the book SICP, which is an entry level text in this.

>Networking

Programs do not need to run in isolation, they can communicate. Writing a sample program like pong made to work across a network will make you appreciate how much goes into this; google for guides.

how do you know what you need to learn to make you want to make?

(5/5)

>Games (and apps)

Before I go further: If you're coding alone, don't make an engine if you want to make a game; it's like learning how to build a toaster when you just want to make toast.

I must convince you of this.

Engines are last stop on the "getting good" train. They are huge undertakings. Any book on programming or resource that claims to teach you this, or even how to build a game, while claiming you can skip or ignoring any of the earlier mandatory topics I told you to learn, is lying to you for ad revenue or sales; you'll copy the code from the book and won't learn a damn thing. Go read

>gamasutra.com/blogs/MichaelKissner/20151027/257369/Writing_a_Game_Engine_from_Scratch__Part_1_Messaging.php

And come back, and feel free to claim to me, after all four parts, that engine development when you want to make a game seems like a good idea. I look forward to playing your game never.

For those who do listen to my advice, choose a development environment.

>Mobile

iPhone uses swift, android presently uses java. Stanford on Itunes U has a good video series on developing applications using swift, OCW has one for android. Learn what MVC means through these classes, and do all homework problems attached to the course. You'll improve from there, slowly.

>Desktop

Download Unity, Game maker studio, or UE4. Read the documentation. Build the example games, and build several example games from youtube, even if they're boring. You need the foundation. Then build yours.

>Online

HTML5 and Javascript is currently gaining ground, flash is dead. Google for resources.

Don't skimp in the learning process, study deeply. If you're not sure when to move on topics, or how fast to go, google for university syllabus's about the topic, they tell the professor's planned schedule as he believes is reasonably possible for someone full time. Adjust accordingly.

Those are all the tips I have for a newbie coder. Best of luck, OP.

This advice is awful, bits don't matter and neither do algorithms, they're a solved problem.

I can solve any problem I run into with a javascript framework,
They implemented the algorithms forme. Backend? Try node, dumbass. Front end, react can do it all.

C is dead, and telling a beginner otherwise is a waste of time. I encourage you all to ignore everything he says.

ya, stop giving more than 2 shits about "wut langage i lern fist". Literally fuck off, you're just stalling. Here I'll pick for you, C++. Why? because you'll learn concepts that will transfer over to every other language and learn about pointers and memory management, yet it won't be as painful as C.

Find some competitive programming sites and solve problems. Start with very easy ones. There are many sites with 10s of thousands of problems for you to solve. Write a program, test with some sample input, submit to the site, it tells you if wrong or right. Hands down best way to learn and apply algorithms and data structure knowledge that you'd learn in a university course (except most retards never learn hands on what it means to write dijkstra's single source shortest path).

Different languages are better suited to different things. I wouldn't worry about it, that's a question you'll discover the simple answer to through experience.

Another thing to keep in mind OP, as most of the answers here will just confuse and overwhelm you. When you get a job programming you'll be working on some project. Applications are big things, and have many levels, there isn't just one language used. Maybe the actual program is written in one language, but maybe theres a networking component, maybe a web component, how is the user going to install and build the program when they first get it. Different tools might be used for each part. Often you will need to know several languages, but don't learn them pre-emptively, you learn what you need when you need it. Every new job will have requirements you don't have, you learn. Thats part of the job. Learning

Wrong. Best language is FORTRAN.