Code: The Hidden Language of Computer Hardware and Software.
It may be a bit more lower level than you're looking for, but it'd be a great foundation to build off of.
I always recommend this book called 'Clean Code'
It details a collection of techniques to keep your code readable and maintainable.
In general use good variable and method names and use more, shorter methods where appropriate
I personally prefer Repl.it. They have online code editors/compilers for almost every major language. Here's the link specifically for Python3.
No problem. It's a really good exercise to write something small like this, then spend time refactoring it based on best practices. I always recommend reading Clean Code by Robert C. Martin. You can find pdfs of it online. Excellent read. Would definitely help you out.
Code: The Hidden Language of Computer Hardware and Software
I'm surprised no one has mentioned this yet. This is the best book for beginners. It will cover the basic of codes (generic), how electricity works, counting systems (binary, base ten, hexadecimal), switches, boolean logic and logic gates, memory, basic computer architecture, operating systems etc.
It assumes you have no knowledge regarding any of the topics mentioned above while using intelligent and straightforward writing.
Seconded. For me the two most useful pieces of literature on the subject of version control via git were:
The online git book, to learn the "language" and how it works
The common git workflows (originally the Git Flow article), to learn how to effectively use it
It's very unlikely for you to learn, for instance, that a branch is nothing but a pointer to a commit, and be able to exploit that aspect of git, if you only follow GUI tutorials.
edit: PR = Pull Request
and here's even more on PRs
That should get you started
>Now second thing is I did ask others and it seems this is not what programmers are using.
RPGMaker is geared towards people who can't program. It's for making a specific kind of game.
If you want to make games and learn to program I suggest trying Unity (which is free).
Now go and hit your 2 friends over the head with a $120 shovel. They deserve it. You can get it for $30 on Steam right now. It's on sale.
> Are there any actual advantages of using more advanced software
Syntax checking, context-sensitive auto-complete, call-tips, linting or static code analysis, Git integration, integrated debugger, integrated task runner...
I think this is something a lot of people completely disregard. Programming is so accessible and has so many online resources that it inherently feels very basic and 'easy'.
I was experiencing this phenomenon just recently where I started going through The C Programming Language book, I thought wow, C is so easy, let's just speed through this so I have a good base knowledge of code and the more technical, mechanical systems behind programming. Sure enough, I jumped in headfirst and I found it very challenging, even in the first section which was only dealing with very basic string data my brain was melting trying to work out the ASCII values and how they translate in arrays
> It has to read c and c++
Writing a C++ parser is pretty fiendishly difficult. Heck, writing a C parser is far from trivial. But all is not lost - your best bet is to look at clang & LLVM which were designed to make their C++ parser accessible to third-party tools. See http://clang.llvm.org/docs/ExternalClangExamples.html and http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/ for places to get started.
Bottom line - this project will be difficult, but it's not impossible, so long as you don't attempt to write your own parser.
>“The best way is always to stop when you are going good and when you know what will happen next. If you do that every day … you will never be stuck. Always stop while you are going good and don’t think about it or worry about it until you start to write the next day. That way your subconscious will work on it all the time. But if you think about it consciously or worry about it, you will kill it and your brain will be tired before you start.” — Ernest Hemingway
From his book "Ernest Hemingway on Writing". Lots of good advice in it.
Learning RegExp felt like learning sanskrit or some ancient glyph-language. Really hard to wrap your head around. It's power lies in it's complexity and it can get really fucking complex, especially when you start delving into capture groups, positive/negative lookaheads, different RegExp engines, etc. You take a step back, look at your perfectly crafted RegExp and it looks like some incomprehensible alphabet soup a minute after you write it. Then you test it and it fails some case you hadn't thought of and you're back to square one.
In practice, 99% of the time I need it, I'm doing a simple match/replace.
The other times, I first look up if there is an ISO standard expression for something like checking an email address/telephone number/etc. that's already been tested. (Although email validation is typically handled by a separate process, a simple client-side regexp can knock out 99% of invalid email attempts.)
The dead last thing I do is write my own regular expression.
Here's some resources that have helped me learn since this is /r/learnprogramming :
Yeah, I remember my freshman year. I would TAR all my projects according to their versions. If I messed up, I'd untar and start fresh. Glad Google has a free git course where I learned the fundamentals in 2 days. Changed my life. Then beginning my Jr year, git was taught and surprisingly not many other students knew what it was or bothered to learn. Any programmer should definitely pick this up even if it's for simple projects. If y'all want private repos for free, consider creating a git server with a Raspberry Pi.
Edit: link to course https://www.udacity.com/course/how-to-use-git-and-github--ud775
follow along with Harvard University's Extension School's Introduction to Game Development course
they have posted all the lectures and assignments on line
they start with Lua and the Love2D framework
and later move onto Unity and C#
You probably won't listen to me and probably think this advice is worthless but meh who cares I'll type it anyways. The source that helped me learn java so far: "Head First Java" its a very fun book with a lot of exercises get it and give it a shot.I recommend getting the book not the online pdf or whatever so you could work on it with a pen and paper. I'll warn you though this is not a reference book, you should start from the beginning all the way until the end.
The biggest help for me was https://www.udacity.com/. I learned a lot through their Intro to CS course. I also took their Java course.
For Android, I used Big Nerd Ranch
To learn fundamentals, I took CS-50 and I think a Udacity/Coursera course about algorithms.
I use F.lux. I'd buy Gunnars but I use glasses so they aren't an option. F.lux is also free.
Also setting your constrast to low and putting up proper lighting helps. Also making sure all your IDEs have dark themes. There are add ons for browswers that turn background colors to dark etc.
Hey, so I was literally you about a year ago!
I started teaching high school right out of college, didn't like it but stuck it out for a few years, then finally left and got a software dev job.
I did some coding in college (only a bit, mostly with Matlab and python). I kept coming back to coding over the years after college because I really enjoyed it. I picked up some Java and Python. When I decided to seriously switch careers, I started teaching myself web dev and C#. For web development, I used The Odin Project. I literally breezed through every technical interview based on what I learned there. For C#, I used this awesome tutorial series, then did lots of personal projects.
I studied for about a year before I started getting job offers. I got about 4 offers out of maybe 200 applications, and accepted a remote position as a full stack dev with a data company. I've been loving it so far, and I'm incredibly glad I made the switch.
If you have any specific questions, let me know and I'd be glad to share more.
Stuff I want to do in my own time:
Books I want to read:
Classes I'm taking at college:
I'm a fan of jetbrains ide's, the python flavored brand is pretty nice. IDE's are totally personal preference though. The nice thing about jetbrains IDE's is that they've pretty much got a flavor for every language, so once you're familiar with one, the others are just as easy to use.
Not sure if anyone has mentioned it yet but this exact topic, and others like it, are discussed in Clean Code by Robert C Martin. A great read for anyone who has ever asked themselves, “what does ‘good code’ look like?”
He, uncle Bob, argues that since comments are rarely updated as much as the code itself, comments often spread misinformation and add clutter to the code. He also discusses when comments should be used and what a good comment looks like.
Again, great read for things like this.
The actual C++ community at large has largely said that there's basically three "intro" or "learning" books:
I don't want to spend 1600 hours write up a review of another garbage C++ resource. In general they suffer from not teaching you modern C++ and instead often devolve into teaching you C stuff that C++ supports for legacy purposes even though newer paradigms have 100% replaced those C things. Or they suffer from simply teaching poor programming practices in general.
Check out freeCodeCamp or The Odin Project and see if it's a viable path for you and you're interested on the subject covered on these courses. They're free.
I highly recommend GameMaker ( http://www.yoyogames.com/studio ). It has a fully featured free version. I taught myself basic programming when I was 10 with their drag-and-drop system (way back with GM6), but it also includes its own language called GML that's similar to Java and Python. If he ends up getting really into it, they also have modules to export games to iPhone, Android, Windows Phone, Linux, Xbox, Playstation, etc.
There are a few ways that you can achieve this usually.
1) Scrape the data. You can write python code for example that will request a website (just like you when you go to www.google.com) and it will read the raw HTML. It will 'scape' for keywords, or for whatever it is that you're searching for and have specified in your code.
2) Using an API. Some companies or platforms have an API set up so that developers can request to use data that they store on their servers (but only the data that the company or platform specifies, not just any data). Here is an example of a movie database API that you can use to serve up data & metrics about movies. https://www.omdbapi.com/
The overwatch website specifically scrapes data form https://playoverwatch.com/en-us/ and serves it up so that anyone can just search it.
GitHub, BitBucket, etc are all just sites/communities centered around using the program. They have some nice stuff but don't replace git or git knowhow. You can use git just as easily and effectively by copying the folder onto a flash drive or uploading a zip to Google Drive or something.
Official documentation: http://git-scm.com/docs
About git branching: http://pcottle.github.io/learnGitBranching/?demo
Effective Java 2nd Edition gave a ton of insight into how the language works and is meant to be used. Just understanding how/where certain data types should be used and their intended function improved my ability to refactor and optimize code by an order of magnitude.
Depends what your ideal career is: if you're interested in AI, data science or web programming, Python's a better bet. If you prefer things like game development or low-level code, C++ might suit you better, since it's a lot more popular for these purposes.
In terms of job postings, on Indeed, Python is more popular. Obviously that doesn't represent all of the industry, but it's quite interesting to see that Python's taking the lead.
The relative growth graph is also pretty interesting, since it shows that C++ job postings have been in decline constantly since mid-2012, whereas Python jobs are growing more and more.
Anyone who tries to tell you that 'Python isn't used in the industry' or 'Python is a beginner's language only' is almost certainly wrong - although C++ has been around longer, Python's become widely adopted. Some major companies that use Python in their stack include Reddit, Dropbox, Instagram, Google, and more.
Also, you'll probably find that it's a bit easier to learn Python and improve your skills with it, and it should allow you to become a better programmer overall and transition to other languages more easily if you need to.
My honest advice is don't go into computer engineering if you don't like programming. You have a lot of options with electrical engineering that do not require or require very little programming. If you do want to learn on your own C++ is a great place to start whether it be for software or embedded systems.
If you set on it there are a lot of resources out there to learn codeacademy.com and udemy.com both have free intro courses. There are a lot of good books you can pick up which involve free software such as Codeblocks. "Mastering c++" is a good book I started with.
Reading through a classic at the moment, "Clean Code" ... for shame, op. For shame.
Unfortunately, the type of learning with C++ you're looking for isn't... common, perhaps is the word I'm looking for?
You would think with it being such an old and (fairly) popular language, there would be an overabundance of material, and while that's true, very little is good material.
Sorry man, I know it doesn't answer your question like you wanted, but it's the best I can offer. C++ is really one of those, "get a good, recommended book (C++ Primer is probably the best ATM) and practice." But definitely go through the discouraged resource list the bot mentioned below if you do some independent research and find something of interest. C++ is a language that offers a massive amount of freedom, but being 30+ years old and having been standardized several times over, that massive amount of freedom means massive amounts of opportunities for bad habits/practice.
I had a similar problem, except that I didn't get mentally drained out as fast.
(as for the motivational part) I played it like a game. I used lifeRPG (a mobile app). I made myself achievements. I created a little ratio system.
> 1 hour of playing videogames -> 2 hours of studying
> 1 hour of surfing the web -> 1 hour of studying
> (converse of both works too)
I guess the huge reason that worked is that I was just so sick of myself of playing games and surfing reddit/imgur all day.
EDIT: I would recommend to just keep going at it. When I first started this (2 months ago), I couldn't study for more than 4 hours straight. Now, I could just study the entire day and barely feel exhausted.
EDIT2: Formated the ratio system.
I've collected over 100 entries from all across Reddit to Hacker news.
Here you go.
If you want to contribute, here's the link.
If you are fluent in c# or C++ swiching to Java is a matter of days. However, mastering the different frameworks will take a lot longer.
If the job doesn't requires specific frameworks experience then use the following ressources:
_ Java tutorial to get started: http://docs.oracle.com/javase/tutorial/
Then you need to read carefully and understand the two following books: Effective Java and Java Concurrency in Practice
It's all you really need to start producing good Java code.
It really doesn't matter much. If you go for C++, you should keep in mind that it's a hard language and that you won't see results as soon as you would if you were learning a different language. Switching to something easier (like C#, or even Python) is perfectly fine.
You should also make sure to learn C++ from a good resource. My advice would be to get C++ Primer and then work through it, at the same time also making a project with UE4.
Hey, hope you don't mind, but I've gone ahead and transcribed your video with proper CC here:
[Edit] Added part 2.
IntelliJ IDEA Community Edition is free for everyone and will more than meet your needs when getting started. Also note that if you quality, students can use the Ultimate Edition for free as well. But for starting out as a beginner, there likely isn't anything in the Ultimate edition that you will need anyway.
IntelliJ IDEA is often considered the best Java IDE by professional developers. Others that get talked about are Eclipse and Netbeans. One consideration for not using IntelliJ would be if you get any labs or tutorials based on another IDE, you may want to just use the same tools that are being taught and your classmates are using.
> I would advise against trying to pick up Vim while you're trying to learn C
+100500 - the words fail to express how valuable advice is, in my opinion
Really, it is quite painful to learn several tough things at once. If not Atom, I dare to suggest using gedit under linux or notepad++ in Windows.
> I've been told that the learning curve for C is steep
The only thing I can suggest - try to make the learning curve smoother with going through good book and working on many simple problems increasing by difficulty.
As about book - I believe there is nothing better than Kernigan & Ritchie 2nd edition
I hope you do mean you learn C, not C++ (in which case you should read C++ Primer instead).
As about simple problems - check my CodeAbbey - it starts with problems on simple addition, loops etc - perhaps this may help. The bad (or very good) thing about programming is that you really want lot of practice to succeed.
C++ ressources on the internet are just terribly bad. You need to understand something: C++ and C are very different languages. You can write C++ code that looks like C but you shouldn't.
The best introductory C++ book I know is Accelerated C++. It starts with C++ features and doesn't teach low level stuff in the beginning.
I heard good things about C++ Primer too. Then if you really like C++ you should start building stuff while reading Effective C++ to apply the principles and good practices taught.
Since you are new to computer science I suggest you build something challenging with C++ to really learn it well. If you are motivated you can build a compiler, an emulator, an OS, a web browser or something like this.
If I could give my younger self one piece of advice, it would be to focus on building things, not on learning concepts or languages. Learn what you need as you go along. Always keep in mind why you're learning something, and you will never struggle with motivation.
Lua is a great language. You can also make your own games with Lua using LÖVE.
Code: The Hidden Language of Computer Hardware and Software is a great intro to some basic computer science concepts. It's written to be accessible to anyone and explains things clearly.
I have not worked with the Netflix API myself, but you can absolutely write a GreaseMonkey script to intercept the Netflix DOM and manipulate it on the fly. This could you help order things to your liking, provided that the Netflix DOM is predictable and the nodes do not change too much under your nose.
I recommend godot engine, it's open source, quite powerful for what it is, free, and if you get into it you can eventually look under the hood.
Main problem, still a low adoption rate means tutorials and support are rather sparse, but not non-existent.
I think it's good habit to get into using git. Even as a beginner. Github is a server running git. You can use git on your local machine. You don't need github. Just know that your git/code/work is vulnerable to loss if its only on your computer. Github is one remote git repo option of many available.
To answer your question about multiple folders. Those are just file system folders. Its an organization of logical groupings of related files. Includes, images, etc..
Check out http://git-scm.com/ and especially the documentation. They break it down quite well from basics to working with multiple remotes and multiple coders in one codebase.
The official GitHub guide is a pretty good starting point, as is this guide on egghead.io. Make sure you're very familiar with Git (the add-commit-push cycle, branching etc.) and GitHub (pull requests, issues etc.).
Usually a good starting point is to work on an existing issue, although creating your own issue isn't a bad idea if it's a relevant one. Some projects use other issue trackers than GitHub (like Jira, YouTrack, Bugzilla) so make sure you know your way around the project.
On that note, make sure you understand the project's workflow. A lot of projects use the git-flow model, it's worth some research. Your pull request is far more likely to be accepted if it's in line with how the maintainers themselves work.
On "how to get skilled enough" - you're skilled enough right now. GitHub is a very friendly place, and if your code isn't up to standard, you're likely to be guided in the right direction, or simply politely told that your changes might not be the best ideas. Project maintainers' GitHub profiles are their public CVs, so they're not going to be assholes to people who are just trying to help.
Find issues you think you can tackle, fork the project, and make your changes! If your PR isn't accepted, improve it or move on and try the next one! There's no shame in trying, and having an active GitHub profile is a great career booster.
Google Drive has some form of version control. Haven't tried it before but could help in this case. https://support.google.com/a/users/answer/9308971?hl=en
And next time, use git (or tbh any version control system like mercurial). GitHub even has a desktop version, I used it when I was in college. https://desktop.github.com/
Hey guys, Thanks so much for all your love and support. Here's the an outline of what we will cover in the bootcamp
-Python Basics (e.g. Variables, Data Types, Lists)
-Functions and Packages (e.g., Creating Functions, List Methods, String Methods)
-Numpy (e.g., Arrays, Statistics)
-Matplotlib (e.g., Scatterplot, Histogram) (Only if we have time)
We will be using Repl.It , a free browser based development environment to code so you don't need to download anything beforehand.
I dunno if zoom is necessary, since by live streaming they can see what you see already.
But Id recommend making use of the Live Share functionality on Visual Studio Code!
Lets multiple people work together in real time on the same code, quite powerful.
I think git is what you are looking for and it's never a bad time to learn git. Here is the book about git, how it works and how you use it.
Github is a git host. You can think of Github as the cloud storage of you git repository. Like Dropbox is cloud storage for "regular" files". So Github would (essentially) be to git repositories what Dropbox is to regular files.
Of course Github has some more functionality but it's not really something you "learn" as you would git itself.
First and foremost you need to learn how to do programming. Loops, iterators, recursion, arrays, all that basic stuff. This is typically taught in the first year or two. Once you know how to write a program (i.e. the fundamentals), the most important computer science class by far is algorithms/data structures. Learn everything from it. Operating systems is a close second because it gives you an appreciation of how things work at a low level which will help you debug once you get into the real world. Discrete structures and linear algebra (especially set theory) are a close third.
In terms of practical knowledge, Code Complete and The Pragmatic Programmer are must reads for anyone working in the field. A book about software design patterns is another one. I like Head First Design Patterns. A novice mistake is to try to use all these design patterns everywhere all the time, so just be careful about that. Knowing when/where/how to use them comes with experience, but it will get you thinking about how your theoretical knowledge can be applied in the real world.
There is also an extensive list here: http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read
Practice, a lot. Practice until coding basic stuff becomes second nature, then try harder stuff. Always be learning-- when I was new I would look for syllabi from other universities and just do the homework that they assigned because I just wanted to learn more. I figure... if I can implement that solution in this language I'm teaching myself, I'm on the right track. Still to this day I regularly visit /r/dailyprogrammer and attempt the problems. I like learning new languages, so I'll try one of the "easy" problems in a language I've never tried before. Maybe next I'll try Elm or Dart!
The biggest boost to me came from open source projects. Find really, really big open source projects-- Firefox, ElasticSearch, Linux-- and just start trying to contribute. It's hard at first but being able to understand code you didn't write and add to it in a way that is helpful is such a good skill to have.
Lastly, don't ignore books. Reading Clean Code basically changed the way I do all of development. On my desk right now I have Agile Principles, Patterns, and Practices in C# as well as Microsoft .NET: Architecting Applications for the Enterpries-- both of which have been very eye-opening on how to develop extensible, secure, fast applications using patterns I'd never considered previously.
Know that there will always be 100 things you don't know for every thing you do, so enjoy learning!
D isn't a bad language, but it's not been adopted very much, even after several years. A more promising alternative is Rust, which is a memory-safe systems programming language that probably covers a lot of similar use-cases.
Rust is quite difficult to learn at first, though, and I wouldn't recommend it as a first language, but it's a joy to use once you understand it a bit more.
Here's the paragraph where he talks about comments
> Nothing can be quite so helpful as a well-placed comment. Nothing can clutter up a module more than frivolous dogmatic comments. Nothing can be quite so damaging as an old crufty comment that propagates lies and misinformation.
>Comments are not like Schindler's List. They are not "pure good." Indeed, comments are, at best, a necessary evil. If our programming languages were expressive enough, or if we had the talent to subtly wield those languages to express our intent, we would not need comments very much -- perhaps not at all.
>The proper use of comments is to compensate for our failure to express ourself in code. Note that I used the word failure. I meant it. Comments are always failures. We must have them because we cannot always figure out how to express ourselves without them, but their use is not a cause for celebration.
>So when you find yourself in a position where you need to write a comment, think it through and see whether there isn't some way to turn the tables and express yourself in code. Every time you express yourself in code, you should pat yourself on the back. Every time you write a comment, you should grimace and feel the failure of your ability of expression.
Clean Code - Robert C. Martin
/u/ericswc listed several good points. Most of them are covered in the book Clean Code by Robert Martin. I highly recommend reading it as it addresses your question directly.
You can also search for common code conventions for your language and force yourself to use those. Once you've got those types of issues under control, you'll probably be looking at improving the overall structure of your code, which is where you'll want to start looking at design patterns.
In addition, it's always a good idea to find projects known to maintain a clean code base in the language/stack you're using and read the code. Actively look for differences between your code and theirs and figure out what changes you want to adopt. This is also a good way to see design you've in action, as learning about them from sources like books or websites can leave you with a less than complete understanding of how a specific pattern can be useful.
Clean Code is a really good one to read through. It's more of a guideline for how you should make your code look/read - parts are a bit advanced, but I really enjoyed it and I feel like I'm not much more advanced than you are.
I mean, there's books out there like this.
In my own experience, it's a matter of coding enough. You have to try to create something and do it naively. Having done something yourself gives you a reference for when you study programming in books or videoes or when talking to others that you can compare new information to, so you can realize how you could have done things better in your own project. If you don't have any reference experience, you wont learn from the information in the same way. It's part of becoming a programmer that you'll write some crap code.
Try to code some simple desktop application, like a text editor, or some other simple program. Make a list of features it should have - for a text editor, you should be able to input text, modify the input text, save the text and load a text file.
C++ Primer 5th edition is what I've been reading this summer since I got out in April. The language is usually pretty friendly but can often times require me to reread paragraphs multiple times to understand what he's saying. I've tried to learn the language with various online methods but nothing has stuck for me like going through the textbook, doing the exercises, and practicing the concepts in mini-programs to make sure I understand them.
In general yes. good code is easy to read and maintain. When I was a junior dev I assumed code that was hard to read was impressive , but the truth is , it's not.
Here's a few things to consider when looking at "good code":
Here's a few resources for writing good code:
A book that is semi-related to this topic might interest you:
Here's a good overview. Ignoring Nosql and sqllite, you should be looking at mysql and postgres. The gist of that article is that postgres is better in almost every single way except speed.
As someone who was introduced to coding at the age of 12 ad immediately grew interest in it, I couldn't agree more. I found coding very fun and devoted a lot of my youth to it, but in reality, I never left the ifelse phase. I was satisfied with creating the code which just worked because this was what I considered fun - never paid attention it it's ugly, if it's not optimal, not scallable, if I can't even decipher what it does after a few weeks etc. because it was "boring".
Now I'm 24 and decided to finally become more serious about it. Bought Martin's Clean Code book and honestly the first three chapters taught me more about programming that I've learned for those 12 years. One could think that such headstart that I had should give me some advantage and oh boy, one would be very wrong.
That's what I meant kinda. Either the books are not working, or your approach to education lack systemacy. I heard http://mooc.fi/courses/2013/programming-part-1/ is a good stuff. As for books "Head First Java" and "Thinking in Java" are a must.
Yep. One reason I abhor things like Leetcode, because while you might need to know what "time complexity" is, you don't need to know how to calculate the "Minimum Insertions to Balance a Parentheses String" (we have libraries for that).
One of the best interviews I had - even tho I didn't get the job! - was for a local hospital, where they had a fake broken API written in Node/Express, and they wanted me to talk through how I debugged it. They also wanted me to add another route (tho for what, I can't remember).
You know what I almost never do at my current job? Solve fancy algorithm problems.
You know what I do almost 100% of the time at my job? Debug stuff and add incremental features.
will teach you all of the syntax and usage, it's interactive. It's way better formatted than the codecademy one.
The problem with learning SQL is that the syntax is easy, the hard part is knowing your own data structure so well that you know exactly where to join and subquery against.
There is too much in coding for any one person to learn and its easy to get lost on which direction to pursue, especially when self taught!
For what its worth, I think FreeCodeCamp does a much better job of teaching you web programming than CodeAcademy.
Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming is good book for Python for people without previous programming experience. I do not have any recommendations for Flask and React since I do not use them.
The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
TCP/IP Illustrated, Volume 1: The Protocols, 2nd Edition
I can't comment on them all but several of them are easily worth the $15 price. It is a very solid collection of books as well. I am surprised Head First Java was not included but it isn't a big deal. If you are interested in learning Java I would say go for it if you don't mind reading digital books.
I wouldn't recommend C++ as your first language, it's arguably one of the most complicated programming languages around, and is very challenging to learn (even more so as your first language).
I'd suggest something like Python which is far more beginner friendly. You can learn via Learn Python the Hard Way. You can make games in Python, and you'll be making them a lot sooner than if you began with C++.
If you absolutely insist on learning C++, C++ for dummies is pretty much one of the worst books you could learn from. Since it's your first time programming I'd suggest C++ Primer (not primer plus).
First, while you may be able to find Postgres specific Database Engineer positions - you're probably going to have to switch to one of the big two (Oracle or SQL Server) to have your pick of the job market.
From there, study Relational Database Theory and Database Design (designing databases from the ground up). The book I suggest for beginners is Database Design for Mere Mortals.
You can then branch off into such things as Report Development with SSRS, Crystal, Actuate, etc. or ETL Development is also a possibility. Or you may go the more general route of wielding a heavy and expert knowledge of T-SQL (Microsoft) or PL/SQL (Oracle).
There are many disciplines within the area of databases. Lots of cross training usually exists between these areas though. So every database-related job is different. Some are just focused on a specific area and some require knowledge of everything.
FCC is totally awesome! It brushes you up from a complete beginner and prepares you up to a job interview, and that too for FREE! But with too many contents, it might be overwhelming for someone who wants a crash course on JS. The Odin Project is also a great starter which covers all the basics of JS and even some popular Front-End libraries like React, Angular and Vue.
If you want a general understanding of how computers and code work, I could not recommend a better book than 'Code: The Hidden Language of Computer Hardware and Software.' I'm not sure it would help you learn coding or algorithms, but it does give you a big picture view of how computers work and it's a very interesting read.
The obvious answer here is: yes!
So, which one to learn first? It depends. Since you have no programming experience, most people will probably point you towards python first.
I'm gonna suggest C though. A good foundation in C will make learning any language easier. C is a very small language. As a result, you'll spend less time learning about all the cool features, and more time developing an understanding of the fundamentals of programming. And while you may struggle to grasp certain concepts at first, I think it's better to understand the basics before diving into more full-featured languages.
However, The C Programming Language is written by programmers for programmers. Don't get me wrong, it is the book to read if you want to know C, but don't be put off if it seems like some of the stuff is a little over your head. I think they even mention in the intro that it may be necessary to consult more experienced programmers while going through the book.
welcome to programming :)
this is a good doc on this topic: http://space.wccnet.edu/~pmillis/cps120/cps120_pgm_syntax.pdf
some fun reading: https://www.quora.com/What-are-the-coolest-and-or-funniest-programming-errors
In order they appear in the source code:
std::ostream& operator<<(std::ostream&, enemy const&)
Example rewrite: http://ideone.com/Msyno
It's a SUPER short course, only 10 steps through the whole thing and 3 of them don't have you even typing anything.
A great introduction, and if you'd like to learn more I'd highly suggest http://sqlzoo.net/ they're free and gets into a lot of the joins, self joins, NULL handling. It's a good next step after this lesson from codecademy.
Was curious about the books so I did a bit of Googling, and man, you have to hand it to computer folk. Both of them have a PDF version available online, so you don't even have to buy the book!
The Pragmatic Programmer:
Skimming through Clean Code, it looks pretty sweet. I think I'll check it out - thanks Chintagious!
Code: The Hidden Language of Computer Hardware and Software https://www.amazon.com/dp/0735611319/ref=cm_sw_r_other_awd_ZhebxbW6E4PVV
Not exactly programming but by far my favorite computer science book I've read yet. You will find yourself learning a lot without dry content. An amazing book
Recently took a course at my university which did exactly that. The course even says: The informal goal of the course is "to make real C++ programmers out of the participants, not Java programmers who use C++ syntax".
I thought it was really good so I'd suggest checking out the course page, all lecture slides/exercises/labs/project is available online for free. I found the book for the course (C++ Primer) also really good.
So with video games, you're going to want to go with Libgdx. Libgdx is a fantastic game library (and honestly the standard for Java game libraries at this point).
It uses LWJGL, which is an OpenGL wrapper for Java.
Both of which allow you to use OpenGL with Java, but Libgdx adds some extra functionality if you're looking to build things a little quicker.
I believe he just means be consistent in the style of your code and how you make it readable.
Just write code that coforms to a style guide like for the GNU Linux kernel or PEP 8 or something (depends on the language and type of code). If you conform to a popular style guide for a similar project, you should be fine.
Books like Clean Code would be worth a read. Also books like K&R.
+1 for bento
If you want to actually practice writing code, you can solve some coding challenges on sites like the ones below:
Assuming you're already reasonably comfortable on a Bash/sh prompt: The best place? Your own server! If you don't have one and don't want to pay for something with AWS, digital ocean or whatever you can just run virtual machines on your own computer just fine most likely. VMware player is free and makes it easy to get a virtual machine going.
Ubuntu and its derivatives have the most help available online through questions asked to try and work it out yourself. DigitalOcean in particular has some good docs to help you like this one. Outside of Apache+PHP you generally need to setup a module or a second application server to run code. Nginx, for example, is meant to serve your static content like .css and .js very quickly, but defer the work to something like gunicorn to actually interpret and run python to generate the page if you're using Django or something.
If you aren't comfortable on the shell, yet, well you'll want to get that down first.
Check out this free online class, I think you'll really get into it: https://www.udacity.com/course/intro-to-artificial-intelligence--cs271
I took the Stanford version a few years ago and it's pretty awesome if you're into AI and it's taught by Sebastian Thrun, a pioneer in the field of machine learning and self-driving cars.
> I have seen a few times that c++ development on Windows is a pain
No, Windows is a perfectly good C++ development environment - it's what I use for all my primary C++ work; I then port the code to other platforms. What is a pain is Windows GUI programming in C++ - if that's your target, then I would suggest either learning C# instead, or using a toolkit like Qt and the associated Qt development tools.
For C++ IDE development on Windows, you either need to use Visual Studio, which is an excellent IDE, or an IDE which uses GCC (or clang) such as CLion. The best source for GCC on Windows is IMHO, TDM GCC, which you will need to install in addition to CLion. CLion is very capable, but whether you enjoy using it will to a certain extent depend on how much you like CMake, which is its build tool - personally I don't like it much at all and use Code::Blocks as my IDE of choice.
This is also how I think about it.
Another thing I'd add is: how often do you have to deploy hotfixes for bugs? (Or how often do bugs come up to be fixed, in general)
> Still, having another pair of eyes look at your code is huge. Is there any way you could arrange informal reviews, or have a coworker advise you on a particular difficult piece of code or something?
Agree with this too. Even if you know you can figure out a solution on your own, your coworker can be your real life rubber duck for complex implementations.
Also, I suggest reading up on different programming architectures / paradigms (especially if you don't discuss these things with colleagues). I've always recommended two books: Clean Code and the Pragmatic Programmer
It's the main reason that I encourage all devs on my team to read the Pragmatic Programmer and Code Complete. It doesn't substitute a CS degree but it helps a ton in creating a common vernacular every member of the team can use when describing things. Improve communication and helps a TON with problem solving since everyone knows the common keywords used to describe the types of things they're looking for.
All that just to say I agree 100% that vocabulary is so critical!
I'm just going to flat-out say this: if this is your first app, don't do this project.
There is a LOT of need for security when dealing with student's login information. If that information gets leaked, student grades can become public, which can get the school in a lot of trouble. I would be surprised if you could get this working without the school's knowledge. They probably don't have a public API to send/receive information, because it's a lawsuit waiting to happen if not done 100% correctly.
Start small, establish a career in it and rack up a few years of experience before you do anything on that level.
Good sources include:
TheNewBoston's YouTube series - Some people will say that he's not teaching things 'the right way'. Those people are ignorant and should GTFO this sub </rant>. I liked it, it worked for me, it may work for you. Give it a shot.
Android API Docs - Run-of-the-mill documentation library. Great source once you get going and need to know the details of objects and methods and such.
Google - Honestly, as with most coding, Google is your best friend. There have been so many libraries I didn't even know existed, and Googling some words related to what I wanted to do yielded fantastic results. Information, examples, tutorials, and even full importable libraries.
http://www.codecademy.com and specifically http://www.codecademy.com/tracks/web. I'm learning with codecademy at the moment, great bite-size activities make up the courses (on what looks to me like a big selection of topics), and the best part is it's based on actually using what you learn to progress right there in the browser. And it's free. Go to it.
I think what you really want to know is how Git works, which is the version control system. GitHub is a website where you can store and share code (specifically made for use with Git), but Git is what really does everything. It keeps track of changes made, allows you to work on a separate branch that can be scrapped without affecting the main branch, or merged to keep the changes.
It doesn't really make a lot of sense until you actually use it on a project, but yes, it is a very good idea to learn it.
Going through books is the only way I've successfully learned. Nothing beats the instruction found in a good book. It's such a personal experience between you and the author. They are taking you on a journey from zero to hero. If you take their hand and follow them, you'll end up in a much better place than if you half-assed your way through a MOOC, for example.
Head First Java - Great, albeit unconventional, text that guides you through Java and object oriented programming in general. It reinforces OOP concepts by teaching from so many different angles. It is impossible not to learn from this book. My mom could master OOP from this book.
http://greenteapress.com/wp/think-python-2e/ - Great intro not just to Python, but to computer science and data structures. I'd recommend this as a first book for someone interested in pursuing a career.
https://automatetheboringstuff.com/ - Teaches the complete beginner how to code by building actually useful stuff. Highly recommended for the person that does not want to pursue a career in IT, but is interested by code.
www.HaskellBook.com [WIP] - The way that they mitigate the problem of "I'm not sure if I did it right" is by offering a great IRC chat for support (#haskell-beginners). Often times I'll complete the chapter exercises and then compare with other people in the IRC or just ask for help if I have a problem.
The top 10 are:
> I have written a couple of simple text based games in python that i would like too add to a website so i have a central easy to get too place to show my work
The OP wants to centralize his games in a website, I suggested repl.it to write his python code in it, and then embed it in his website. Not create the website in repl.it
I'd suggest checking out Processing. It is a free, Java-based language (shares syntax and libraries etc) that is geared towards teaching graphics and audio programming. It is a great way to sidestep a lot of the work you'd have to do to get up and running with most engines/frameworks. After you experiment with working with shapes and colors, you can decide if you're still interested enough to try something more sophisticated (Unity, Unreal, etc). It would also be entirely possible to create a game in Processing.
I found graphics programming to be MUCH harder than I anticipated - as it requires a different kind of mental abstraction than working with text and data. It is also very satisfying to get some cool looking animations running.
Hands down the best when it helps with organization of all my resources ontop of categorizing per language.
For example: https://papaly.com/lokmansalikoon/0rGj/Coding-Resources
Bjarne Stroustrup recently released the 2nd edition of his book "A Tour of C++" which covers all the major aspects of the language that is current through C++17.
It's concise and a very authoritative source.
It might be a bit of arrogance on the part of developer friends also. (A bit.) I have a degree in CS and I would say that more important than any particular knowledge was just studying computing for four years.
If you want to get the same education, I recommend these resources:
Those resources are good for learning how computers work, but they don't necessarily make you a better developer or software engineer. Some good software engineering books:
These are nice resources because they're generally about principles and not any particular technology (NodeJS/Angular/Django) that might be obsolete in five years.
NOTE: This will take you well over a year and require you to stick with it. It's like going to the gym: Lots of people will try doing everything at once and be doing awesome for the first three weeks, then give up on it. Set up a regular routine rather than an ambitious one.