30

C++ is like HTML in the sense that everyone wants to learn it as a first language.

DON'T LEARN C++ AS A FIRST LANGUAGE! YOU DON'T KNOW WHAT YOUR GETTING YOURSELF INTO.

Comments
  • 10
    ofc.. you need to learn C first and then go to C++
  • 5
    No sir, you first learn to program logic using circuitry, then you up the bar with machine language and for the cherry on the cake, land some ASM and you're ready to pick up C 😂
  • 4
    @PRein I agree with this... C forces you to develop a really intuitive model of processing resources (memory, threads, file system), while C++ introduces concepts that aren't really needed until you begin to *engineer* some rather complex systems that take advantage of templates and patterns
  • 4
    I for one think HTML is a perfectly fine "language" for one to start out with. It's where I started.

    That being said, for someone who has never done any programming/shit I'd probably recommend they start out with Java. Why?

    * Java is statically typed (ie: `int number = 6;` vs `var whatever = ???;`) so you get a clear idea of how the different datatypes work.

    * Java's syntax is "C-style" so jumping to C/C++/other C-inspired languages won't be confusing. Plus once you know Java I can hand you a pieces of code from dozens of other languages and you should be able to infer what is happening.

    * Perfect example of classic OOP, the basis of most modern programming paradigms.

    * It's pretty straightforward; Java doesn't have a lot of confusing syntactical edge cases that cause unexpected behaviour.

    * You don't have to be brainfucked by memory management/pointers arithmetic
  • 3
    @rozzzly I recommend java as well. you don't have to deal with memory problem right when you're starting to learn the basic structures
  • 4
    Yeah, Java is a good starter. Works almost everywhere. Actively improved. Leads to android work. Pretty fast now.
  • 3
    I learned C++ first, well I tried python first but gave up on it, and I turned out fine! 😳(In the background jars of lemonade can be seen)
  • 1
    * runs anywhere (eg if your using a mac, or are learning linux at the sametime).

    * Right after you master the basics+intermediate stuff, you can move into many different disciplines eg: web development*, SWT or SWING for desktop GUI development, android development or basic video game development.

    That way you can immediately get some gratification from seeing your efforts on learning exercises result in something tangible that you made and can be proud of.

    * I wouldn't suggest spending the time to learn Java WebDev.

    Definitely play around with it a small project or two in java, but don't focus on it too much. To become a good developer there's many things beyond a single programming language that you need to learn. Just knowing one language (even if you've mastered it 110%) makes you a pretty shitty dev because when you're put in a situation where you need to use another lang, and you will be, it's going to scare the fuck out of you because all you've ever seen is java.
  • 2
    After you learn 2-3 languages, you can see how they're all similar and it'll be easy to pick up any new one you want; just learn some equivalent reserve words (ELIF vs if/else), some syntactic differences (eg: C-style braces defining scope vs python indenting defining scope) and a little bit of the the languages baked-in api (really just important function/class names, eg: System.out.println("foo") vs console.log("foo") vs printf("%s\n", "foo") vs cout << "foo" << endl, etc, etc)

    I would suggest that the next thing you learn is a scripting language: python/ruby/js/lua/etc, hell if you're aiming to be a linux dev then you can learn bash (although I wouldn't recommend that be your 2nd lang because its a confusing pain in the ass)
  • 3
    A scripting language would open you up to the vast diversity of syntax/concepts/applications that different languages have, and will be easier to learn now because you already understand if/for/while control flow stuff, variables and datatypes, and objects/classes, etc. It'll be at lot easier jumping to python/ruby from java than the other way around.

    After that, C. Learn about memory, pointers, the stack/heap, your environments runtime eg: WinAPI, a little about how it manages processes, etc.

    EVERY DEV NEEDS TO LEARN C. period.

    SERIOUSLY.

    It forces you to learn lower level things like how memory is allocated/managed, stack/heap, how a compiler+linker works and why we use libraries (.dll/.so), and assuming you didn't learn too much about it in java, threads/concurrency, etc, etc.
  • 2
    You can apply that knowledge to every language (usually not literally; you don't worry about malloc() in js, but you can use that understanding to help you make smarter choices in every aspect of programming)

    After that, perhaps C++ if you want to do something specific that needs C++ like gamedev or maybe back to something simpler/in a different discipline than C desktop apps. Something like PHP/MySQL if you want to do web stuff.

    I also definitly recommend that every dev learn basic HTML & CSS because you'll come across it someday, and will be glad you learned it.

    I also suggest that everyone be able to manage a basic LAMP server (whether on a shared host via ftp & phpMyAdmin, or, like the a PROgrammer, via ssh to an unmanaged vps. You can get a free one from AWS!)

    That way you learn how the internet works, you get some exposure to DNS records, databases, basic server mgmt, linux (chmod) permissions, and most importantly HTTP req/res structure.
  • 2
    Just setup a wordpress blog. You can totally learn that in an afternoon or two. Buy your own domain for <$10 and bam you've got your own website. That demonstrates your "diverse skillset" to employers. You can put a up your contact info, a little portfolio, etc, etc.

    Additional things every programmer should know:

    Git. You can learn svn/other but Git is the future so start there.

    You should also have your own GitHub and actively track repos your interested in, just look a github.com/trending and you'll find tons of cool projects. star that bitch, you'll be able to find it later on if you want to use it, and you get exposed to a vast diversity of code, that really makes you a good dev. From there, contribute to one or more of those repos that interest you (either by PR or just by comments on issues) I've gotten several job offers because they've seen me posting in forums and on github issues. It shows that you're involved, passionate, and knowledgeable.
  • 1
    @rozzzly

    All excellent points. Also, once you know c, you can use that in Java too if you really need to xD through jni.
  • 0
    You're...
  • 1
    From the start, I recommend you use git, that way you can save all of your basic lessons up to github, and by the time you're done, you'll understand how to clone/commit/branch/merge/push, plus you have every version of all the code that you've ever written for free.

    if you want to keep something private use bitbucket, or pay github.. they also have a "student pack" just given them an email ending in .edu, click the activation link and you get a few free private repos plus a ton of other cool shit. If you don't have an active .edu email, ask a friend

    a few other things:

    How to assemble a pc, its not too complicated. Checkout youtube videos and reddit.com/r/buildapc (and reddit.com/r/battlestations ;P)
  • 0
    How to write markdown. Super easy.

    How to debug.

    How to do basic things in linux. this is something you can put off for a few years even, but you should atleast know how to copy/delete/rename files, change their permissions. How to use cat and grep to find things in a file.

    And most importantly, KEEP LEARNING NEW THINGS. I've heard it said that a programmer, ahem excuse me, a PROgrammer should learn a new language every year. After you learn your first 2 or 3, well I would suggest, because it gets easier, that you try out 2+ a year. You don't have to master every language, but you do want to get a feel for it so that someone can hand you a piece of code and you can tell them exactly what it is doing.

    Also try different disciplines.

    Try game dev, even just a 2d game. But don't fucking use RPGmaker or someshit, you're better than that man.
  • 0
    I'd suggest staying away from Unity because it blows, and don't try to use Unreal/etc until you know c++, and have written a few little games from scratch. Game dev, especially 3D (OpenGL, etc, look at Vulkan too, that's going to big in a few years) can be some of the most complex programming you'll ever run across. You know Java already.. try libGDX

    Learn how to query a DB.

    what ASCII and utf-8/unicode are, big and little endian, when and how to deal with them in a lower level language like C/C++

    how to convert a normal (base10) number to binary of hex. Lol you won't be able to read binary or hex, but you'll learn a lot, especially about binary operators.

    How to open a Socket and communicate over TCP/IP.

    Write/read a file

    I really enjoyed learning how to write my own trojan/ring3 AIT rootkit and that really gives you intimate knowledge of pe32, and the deep internals of windows.
  • 1
    It's 100% legal to write one as long as you don't infect (and get caught) anyone else's computers. Make a virus that types swearwords every few seconds then hits enter. Put it on your friends pc and watch him/her freak out the next time they try to use facebook chat XD. The src for all of that is available online for free.

    And no it won't have the FBI/NSA showing up at your house. That only happens if you infect a few thousand PCs and are controlling a botnet, or if you exploit the server of a large company, and "root their box" (rooting someone's box: giving yourself access to the unrestricted root user that has FULL control of someone else's system).

    Even if you have no intention of working with databases, learn MySQL to the point where you know SELECT/WHERE/UPDATE/DELETE/JOIN. So you spend a month doing that and BAM! you're now an "experienced" db admin.
  • 1
    Try mobile development (Android or iOS), if you don't want to learn swift/objective-c or don't own a mac, there are a dozen+ languages that compile down into native code for both Android and iOS. My fav is Cordova+PhoneGap (html+JS)

    Learn as many libraries as you can too. Even if you have 110% mastery, but don't know any common APIs, well you're missing out. That's like getting 300 channels + HBO, etc, but ONLY watching watching PBS or reruns on channel 12, etc.

    Keep up to date with your fav lang or two. Learn about new language features, bugs/exploits you want to secure yourself again, and discover and learn popular new libraries.

    Use github.com/trending at least once a week. I go there daily. Also try something like porter.io or npmaddict.com that give you constant stream of intersting repos.

    BE ACTIVE ON GITHUB. seriously you'll thank me later.

    ----

    damn that was long as fuck. Didn't realize I had all this wisdom to share. I'll have to turn this into a blogpost/gist.
  • 2
    I learnt C++ first and now I am learning C and C# . I don't have any problem in that though.
  • 0
    And here I am learning Java.
  • 1
    @atomicTurtle I find Python to be a GREAT first language in the sense its easy to remember and very laid back basics, as opposed to C++ where it takes so much effort (if your new to it) just to do cout xD

    I personally learned Python as a first and LOVED it. I think if I learned C++ first I would be mentally unstable [insert Kappa here] xD
Add Comment