Home Assistants, Self-Driving Cars, Virtual Reality, Machine Learning, Natural Language Processing, Big Data, Drones, 3D Printing, Blockchain, Internet of Things, Cloud Computing, NoSQL, the Hadoop ecosystem ? What about following tech news portals so that you can see that for yourself ?
As a student, you are better off making sure that you know the basics and can prove that you are able to learn quickly. There is still so much you can do also with "established" technlogies. The most important thing is to know yourself first, because there are so many things you can pick and you have to find out where your main interests lie.
Edit: added Blockchain, IOT, Cloud Computing, NoSQL, Hadoop. Hard to say what is "new" and what isn't.
In the industry, a single person wouldn't be doing a project. Many people come together to build it. There is where GitHub or Git comes in. It's a tool that allows you to control the versions of a project and collaborate with multiple people on a project.
So, if you have the skill of Git, you automatically have an industry-ready skill.
Now, about pushing projects to a github repository. You don't need to start with the CLI tool. You can download the GUI tool to push your projects to GitHub.
But, learning the CLI commands will be helpful in the future, since all git repositories(not GitHub) will have a GUI client.
The link to the GUI client : https://desktop.github.com
Uploading to GitHub will help people who are looking at your code to see how you implement the project in terms of structure, documentation, presentation and following the coding conventions.
Also, it will introduce you to open source software.
And, even if you don't plan on showing other people your code, you can use it to your own advantage. You can control the commits that you do to your project, and if something goes wrong, you can revert quite easily to a previous version.
GitHub allows you to place the source and the releases in the same place and in an organised manner, and since it's a widely used tool, people won't be stumbling around to understand or locate the required files.
Cheers! :)
I wish I had spent more time learning software design theory and verification as well as project management.
"Software design patterns: elements of reusable programming" by the Gang of Four is an absolute must read and a great start IMHO, and then branching out to things like "Clean Code" by Fowler, etc. For project management and group work, git+[redmine|trac|fabricator|gerrit] should get you started pretty nicely.
By “private browsing” it sounds like you’re referring to your browser’s built-in private browsing session such as Chrome’s incognito mode. These sessions have virtually no effect on your privacy as they only prevent your browser from recording your history and storing cookies on your machine. In other words, your activities are “private” to you, but no one else.
Without any form of protection, your activity on the internet is more or less transparent to your ISP and anyone using a packet sniffer on the network you are connected to. However, nowadays most sites are encrypted with HTTPS which severely restricts the amount of personal information that can be uncovered this way (such as usernames and passwords you submit when logging into a site). Using a VPN strengthens your privacy even further by tunneling your connection through a private network and masking your IP address so that your location and other identifying information are more or less randomized. The Electronic Frontier Foundation has a helpful interactive graphic that shows the effect of HTTPS on your browsing privacy as well as the effect of using the TOR network.
I’ve been using NordVPN for about a year now and would recommend it to anyone who wants to become more privacy-conscious but doesn’t know exactly where to start since it is incredibly user friendly and runs on just about any platform (including your router so that all traffic on your network is secure). They also frequently offer fairly substantial deals; currently they are offering 3 years of service for $99 as opposed to the apparently usual $430.20.
Logicomix is really cute if you're looking for something fun and human.
An advisor I worked with when studying formal methods recommended it to me. I got through it in about 20 minutes, but it reminded me to be considerate of things I normally would ignore in the domains of computation.
Well, the binary listed underneath is the same as the hexidecimal numbers listed above.
I'm just assuming that it decodes using ASCII...
Converting direct to ASCII gives this mess: SìÂO,ðë×*M®f¸í!»<Q½He»¼k
Reversing the bits and decoding gives this bigger mess: ��FFl�FFF�l,&F����,FF�L&�LFll��&,�L�&F��f�L̜f,L�Ʀ�̬
​
I also wrote some code to test if the characters are just offset http://codepad.org/JJA4S9AR
That didn't seem like the right answer either. I'm curious to see what methods other people try.
We used Scratch in my Programming Fundamentals class, before moving on to Python. I used to think Scratch was for children, and it can be. But Don't think that you can't do something legit stuff with it.
​
https://scratch.mit.edu/projects/36711178/#editor
​
Super Mario Kart SNES
> can we build an OS from Python
Sure, I don’t see why not. Should you build a language in Python? No, probably not. People have built OSes in high-level languages though: https://node-os.com/ https://github.com/froggey/Mezzano
And probably plenty more.
What language should you use today? I’d say Rust. The Linux kernel is obviously written by incredibly smart people, but programmers make mistakes. Google has a project to identify bugs in the Linux Kernel and found that over 70% of them are memory issues or data races. Mozilla, Microsoft, and many other companies have said the same things about their C/C++ code bases. However, these issues are, by design, impossible in Rust. Rust’s unique ownership model makes data races impossible and allows it to properly free your memory without the need for programmers to do it manually like in C/C++ and without the use of a garbage collector like all high level languages. And Rust is just as fast as C/C++ and sometimes faster, while still being a higher level language.
If you want to learn a low-level language or make an OS today, consider Rust over the traditional choice of C/C++.
Read about the topic.
Practice.
Set yourself little challenges that you work on, or learn a new language/platform/environment. If you're just starting, try different easy programming challenges you find on the 'net. If you've been doing this a while, do something more sophisticated.
The challenges I've set for myself in the recent past include writing a LISP interpreter in C, building a recursive descent parser for a simple language, and implementing different algorithms I've encountered in books like Numerical Recipes and Introduction to Algorithms.
(Yes, I know; you can download libraries that do these things. But there is something to be gained by implementing quicksort in code from the description of the algorithm.)
The trick is to find interesting things and write code which implements them. Generally you won't become a great programmer just by working on the problems you find at work--most programming jobs nowadays consist of fixing code (a different skill from writing code) and involve implementing the same design patterns for the same kind of code over and over again.
When I have free time I cast about for interesting new things to learn. The last big task I set for myself was to learn how to write code for the new iPhone when it came out back in 2008. I had no idea that this would change the course of my career for the next 9 years.
How computers work:
Code: The Hidden Language of Computer Hardware and Software
The Elements of Computing Systems: Building a Computer from First Principles
Algo:
Introduction to algorithms
Programming:
The C programming language
cpp primer
Compilers:
The dragon book
OS:
Operating systems design and implementation
Linux:
The Linux Programming Interface
How to use linux:
The Linux Bible
How Linux Works
The Practice of System and Network Administration
Graphics:
OpenGL Superbible
Networking:
The protocol TCP IP illustrated
Computer Networks By Tanenbaum
Hacking / RE:
Hacking the Art of Exploitation
The Shellcoder's Handbook
Crypto:
Introduction to modern cryptography
Check out the crypto course on Coursera
Heck yeah! We had OOT (Object Oriented Turing) in my high school and it provided excellent foundations for both procedural and object oriented programming. I found it to be a super accessible language with simple syntax that could yield exciting results for a new coder - like easily getting user input, drawing graphics/animations to the screen, etc. I think these days something like processing.org could provide a similar experience, but has the advantage of many powerful libraries available.
In reality CP is different. Sure you need to know algorithms and stuff but that comes at a later stage.
See these sites :
Usually first 3 out of 5 or 6 problems of programming contests do not require fancy data structures or algorithms, just observation and clever implementation and sometimes basic stuff like sorting, frequency arrays, binary search etc.
When you're done with this maybe you can start looking at different algorithms.
I have been doing these challenges
And also using this book to get better at coding, in general: Here you go
Both links are C++ related and work on challenges which build on each other.
I disagree.
With the words of Martin Fowler:
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
Readable code makes it also easier to develop. It's a misconception that paying attention to readability makes you slower. It does not in the long term nor in short term.
In this case its obvious: just take the comment and use them as variable name, use empty line between logically different blocks, extract functions and give them descriptive names... this all could have been done while developing and would give a every reader a nice overview of what is happening. Doing it now on the other hand might take more time since I for example don't know where the logical blocks are here, I don't know what the variables stand for.
To the author of this code i highly recommend reading up on "Clean Code" or something similar.
I enjoyed this one! Code: The Hidden Language of Computer Hardware and Software
Here is someone else's detailed review on it
"Charles Petzold a does an outstanding job of explaining the basic workings of a computer. His story begins with a description of various ways of coding information including Braille, Morse code, and binary code. He then describes the development of hardware beginning with a description of the development of telegraph and relays. This leads into the development of transistors and logic gates and switches. Boolean logic is described and numerous electrical circuits are diagramed showing the electrical implementation of Boolean logic. The book describes circuits to add and subtract binary numbers. The development of hexadecimal code is described. Memory circuits are assembled by stringing logic gates together. Two basic microprocessors are described - the Intel 8080 and the Motorola 6800. Machine language, assembly language, and some higher level software languages are covered. There is a chapter on operating systems. This book provides a very nice historical perspective on the development of computers. It is entertaining and only rarely bogs down in technical detail."
Hi we had a course on big data last year. To break down one approach is the following.
Get Hadoop set up on a system. If you have a cluster available by your school/university, definitely request access, as it will massively increase what you can do for this project.
Once set up, build a map reduce job. This is the most important part. When you work with big amounts of data, you need some way to quickly traverse this data, and filter only those relevant results to be displayed. An example dataset could be found at https://commoncrawl.org. You can take an entire segment of the entire set if you can get a large cluster. NOTE THIS IS MULTIPLE HUNDREDS OF TERABYTES. Otherwise use the indexer to find a smaller sample dataset.
Now how do you map reduce. The idea is simple: You have several cycles where each element is mapped, filtered and shuffled throughout the entire Hadoop cluster. These operations often can be done in parallel and are really trivial by themselves. Important is to ensure that you bring the data to the point of computation, not the other way around. Network traffic will be a large bottle neck. Instructions on how to do this are available online.
You could do many, many things now to optimise this process. Map reduce is by no means the end of big data. But it’s a good start, especially for a tiny project.
If this is too much for a small project consider doing a part of it, or just setting up a tiny Hadoop server with a toy example of the search engine!
Good luck
CODE - The Hidden Language of Computer Hardware and Software
https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
Well, for AI, you should prepare for a world of math, math, math, along with computer science and programming (obviously). Understanding an historic vision of A.I. is also important, so I would consider starting to read something like this particular book: Artificial Intelligence: A Modern Approach! This a college-level A.I. book, so be patient if there are things you don't fully understand at first. Work hard and you can do anything you set your mind to!
Digital logic. You could do basic latches: https://en.m.wikipedia.org/wiki/Flip-flop_(electronics) Depending on your grade level you can scale from basic latches to complex logic gates. Can be done with battery, led, and switches. Depending on your budget and time you could do ardurino projects. Random Google search for beginner ardurino projects: http://www.makeuseof.com/tag/10-great-arduino-projects-for-beginners/
Start with Python:
https://www.udacity.com/course/intro-to-computer-science--cs101
Then: https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11
For math, start with Khan Academy. Aim for 30 minutes a day.
For subreddits, I'd suggest /r/learnprogramming, /r/learnpython, and /r/learnmath.
Like a previous commenter said, based on your current understanding of the field, you're years off from getting into AI but you can start building the fundamental skills you'll need right now, without spending any money or getting formal qualifications. That can come later.
Actually I just saw this yesterday. Google is sponsoring scholarships at udacity so you can take one of their courses and get a nanodegree for free and it's over winter. Here's the link
Well, no that is not correct. Tails is an OS that configures all software to connect on the internet though TOR and drops all other connections that attempt to directly connect to the internet. Also, Tails is a live system that is usually installed in a USB stick or memory card, so when you shut down there are no traces of your activities. Of course, if you use Tails and login to online services (Facebook, gmail, etc.) you are no longer anonymous.
The correct answer is to install Tails on USB stick^[1]
[1]: These are instructions for installing from linux. Here is the installation assistant
You can do really neat things with it. However, I didn't use it until I was in grad school. Depends on the curriculum but some undergrad courses might be formula heavy too. It wouldn't hurt you to know, but it probably isn't going to stand out on a résumé. Unless of course the résumé is in LaTeX and looks really professional. But I should also mention that it is Turing complete.
"it was defeated by the government."
No it wasn't, the government indeed tried to block Tor, but Tor has so many nodes that it's almost impossible to block them, you can actually request bridges and connect to them, that hasn't been blocked yet, it takes like 20 minutes to get connected.
​
Also the government blocks pretty much anything but temporarily, take a look at YouTube it was blocked like 2 days ago, but it was perfectly accessible by VPN, I use a few public VPNs are they are not blocked, I don't use fancy paid shit like TunnelBear or NordVPN, just random plugins from Chrome store or firefox extensions and I can access just fine
​
As for tor, it servers its purpose of creating a complete private network, remember those projects were created so that the armies could transfer undecipherable data and nowadays that's possible even without Tor, but I truly think that Tor should continue even if you really wanted to share the ultimate encrypted communication Tor isn't even an option
We used this book in my first year data structures course, it’s pretty easy to follow along with and has s lot of example projects! I’m not sure what is normally taught in high school CS courses as my high school didn’t have one.
Introduction to Algorithms by CLRS is great and a standard algorithms book in many universities. Be warned, it's pretty long but that's only because they cover a lot of stuff and they explain it thoroughly.
If it makes you feel any better, programmers without a deep math background feel the same way when trying to google math stuff. All fields quickly develop their own jargon; can you imagine how difficult it would be to talk about math concepts if you couldn't use any specialized symbols or terms? You'd have to say 20x as much to get the idea across, and even then it wouldn't be as precise.
So, you're going to have to learn the jargon. The best way to do that is to dive in and learn it the same way you learn math stuff; get some books and work through them. There have been a number of posts in this subreddit about good books for various topics, and you can find lists on the CS StackExchange too. For some of the jargon you'll want to look more on the "pragmatic" software construction side; books like "Code Complete", "The Mythical Man Month" and "The Practice of Programming" are examples of this genre that have been widely read and thus influenced the lexicon. As a bonus, you'll get lots of tips for writing good software that many CS grads won't encounter until entering the workforce.
>Understand the fundamentals first, you are still really young. I'd suggest starting out with Scratch: https://scratch.mit.edu
I second Scratch. It's a language developed by a team that understands both programming fundamentals and teaching and learning in your age group.
Once you feel comfortable/bored with the concepts of something like Scratch, Python is probably a good next step. As suggested, learn data structures and algorithms. These are concepts to be shared across all languages. I wouldn't say life is easy after that, every language and software stack will have a laundry list of idiosyncrasies you have to learn and deal with but at least you'll have a good starting point.
I always refer beginners to codeacademy to pick up some Python basics, and even just coding basics in general.
And don't worry about what classes to take in college. The Computer Science program at whichever university you attend will have a bunch of required courses that you will have to take during your first two years, at which point you will have a much better idea of what you want to do.
I personally learned CS by coding games using Actionscript in Adobe Flash. You should try to make a simple game in Unity. Search the web for resources and information, but don't just copy and paste code without understanding it. As long as you keep an interest in CS from now until college, you will succeed.
Important for what? Job prospects, or personal growth as a programmer?
Alan Perlis, the first recipient of the Turing Award and one of the guys who designed ALGOL, once said
> A language that doesn't affect the way you think about programming, is not worth knowing.
Many of the most common languages in industry are very similar to each other. Learning C# after Java has little benefit (except for employability in jobs demanding x years as a C# dev).
Learning lots of very different languages will serve you better. Some ideas are better presented and learned in one language, but can be used in another. Additionally, you'll have helped future-proofed yourself by making learning new languages easier - once you learn one language in a family, learning another is generally much easier.
Also, it can help you learn new features in industrially used languages. C# is very heavily influenced by Haskell, and Swift also steals some good ideas from Haskell and its predecessors.
At any rate, a list of languages that many would agree are important to know are:
Learning python first is a great idea. It's a simple language with a lot power behind it.
As far as resources go SoloLearn is what you want. They offer step-by-step instructions and their app is really well made. https://www.sololearn.com
Hey when I studied for the exam this book https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X and this guy http://www.professormesser.com/ are extremely helpful, he also does free YouTube lectures, good luck!
I think the flask one isn't that bad, minimalistic for sure but not outdated. (Atleast that's what the homepage looks like on mobile)
I especially love the pygame documentation.
Harvard’s CS50 is a very good course, it’s free on edx and taught me a lot going into college. FreeCodeCamp is another great course, although it’s more focused on web development its algorithms sections is good for anything. Both are self paced although you can pay to get a certificate for CS50 (freecodecamp’s certificate is free)
this book taught me a bit about it. It was interesting to say the least. It gives examples of exploits, like how pointers can totally ruin someone's day.
Warning, it'll make you peek at some assembly. You don't really need to understand it fully to get the jist tho.
Computerphile also has some good videos on this topic, and how people "attack". It may give you an idea.
I don't know a lot, but this is how I learned about it to some degree until I swapped to a different education path.
Try MIT video lectures supplement with introduction to algorithms CLRS MIT 6.006 Introduction to Algorithms, Fall 2011: https://www.youtube.com/playlist?list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb
You can also watch Shai Simpsons lectures on algorithms Algorithms - Shai Simonson: https://www.youtube.com/playlist?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm very informative
Last but not least go to hackerearth and do the data structure and algorithms path problem oriented and a lots of practice
Key to learn algorithms is understand implement then solve as many problems you can.
Good luck.
I've found that, as a CS major, Tony Gaddis's "Starting out With Java", to be a fair beginner's book for Object Oriented Programming. He does other "Starting out with" books, including C++. Most of his versions are all similar. I've programmed in both languages, and find them very close in syntax. His books include code, which you can practice with, and explanations of how it works.
I would also recommending reading, in your spare time, "Clean Code", by Robert Cecil Martin. It's helpful in forming and organizing your code, making it look pleasing, etc.
It's likely that your CS instructors will recommend an IDE for writing and testing your code, so make sure that you have a couple Gigs of RAM, minimum. I have a personal preference for JetBrains IntelliJ and Oracle's Eclipse. Use what your instructors recommend.
I hope that these suggestions would help you, or at least form an idea of what to expect.
I've quite enjoyed "Effective Java" by Joshua Bloch. Obviously its aimed at Java programmers, but it still explores a lot of OOP nuances and brings to light some of its pitfalls. Great book!
If you can wait a while, the 3rd edition comes out in October. Its based on Java 8 while the old one is Java 6.
Not sure about that book. Before Discrete, you might be a little too early to pick up many theory heavy algorithms, but the principles behind them are things anyone can learn. At this point I would actually probably recommend you read up on good coding practices. Clean Code is an easy(ish. Don't get discouraged if you don't understand it all) read that will quickly take your code to the next level.
The reason I say this is because the book focuses on good object oriented design principles, which are of the utmost importance when creating good data structures, and will continue to be important throughout your career.
Congrats on your move. I switched from psychology after two years and have never looked back.
A good school is secondary to your passion for the subject. I learned more in the library than I did from instructors. And what I learned about computer science by reading The Art of Computer Programming by Donald Knuth is more valuable than what I learned from the entire curriculum.
"Computer science" is a very broad term, like "physics" or "biology". To cut to the chase, I would highly recommend the book Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. If you really absorb what it explains, it pretty much covers a CS student's first year, maybe two years, of CS theory. It's also really casual and nontechnical, and it makes the raw elements of computing intuitive. (I will note that it won't teach you programming, algorithms, data structures, software engineering, AI, graphics, parallelism, networking, etc. But it will teach you the raw concepts of computing that nearly every computer scientist should know.)
This one gets a bit in depth and assumes at least a little bit of knowledge on the topic, but I think once you get to that point, it covers a large majority of things you'll need to know and is reasonably good at explaining them.
You’re looking for ‘(.)\1’
The . matches any character. The () make a capture group, meaning whatever is inside can be referenced later. The \1 references whatever was captured in the first capture group.
In summation, this will match any character with the same character immediately following it.
The website https://regexr.com is extremely useful any time you’re working with regex.
Adding to this, Django would probably be a decent choice for an interface to a database. It's a very "batteries included" sort of framework where you can easily get a useful app up and running complete with database persistence, user accounts and a basic but functional admin UI just by following the tutorial.
You'll need to know a little Python and a little bit about relational databases, but nothing at all insurmountable even if you're just starting out. Be sure also to learn Git or another revision control system as well, since sooner or later they will save your bacon when something breaks and you need to find the change and fix it.
Then once you get started, take a look at <em>The Hitchhiker’s Guide to Python</em>, which is a great resource for taking your project and making it easy to deploy and maintain.
About Algorithms, a great book is Introduction to Algorithms by Cormen et al.
About programming I like PHP 5 Power Programming by Andi Gutmans, Stig Bakken, Derick Rethans. I know that it is old, but newer books aren't that good.
Now it's time to branch out to different areas. Things that are absolutely necessary nowadays are 1) systems programming and 2) networking. Next, you can try GUIs, 2D/3D graphics, server-side development (node.js, django, yada yada), security or whatever it is that you're interested in.
An underlying theme for any area you choose is software design principles. Start with books such the "gang of four" design patterns, ESR's "the art of UNIX programming", Martin's "Clean Code" and the list goes on and on.
Finally, other people have mentioned it but, do familiarize yourself with version control systems (everybody and their dog uses git nowadays) and project management tools that facilitate group work and collaboration (trac, redmine, fabricator...).
Did I mention using linux? Yeah, use linux :) Above all, have fun!
The follow is the start of a list of "pleasure reading" books about Computer Science/Programming/Technology that I should develop further at some point. This is super biased towards my interests.
Code By Charles Petzold
The Annotated Turing by Charles Petzold
Godel, Esher, Bach by Douglas Hofstadter
Metamagical Themas by Douglas Hofstadter
Just For Fun by Linus Torvalds
The Information by James Glieck
You Are Not a Gadget by Jaron Lanier
Who Owns The Future by Jaron Lanier
Code and Other Laws of Cyberspace by Lawerence Lessig
Dreaming in Code by Scott Rosenberg
As a historical document, Neal Stephenson's In The Beginning ... Was The Command Line is worth reading (This version, which is annoted, shows how old it was in 2004, let alone when I was reading in in 2009 and now in 2017 http://garote.bdmonkeys.net/commandline/)
You should try to work through The Structure and Interpretation of Computer Programs.
And since you're in High School, two books that will get you far in life no matter the course you take: Getting Things Done by David Allen and How To Win Friends and Influence People by Dale Carnegie.
Buy "Head First Java", and get that shit asap, and for the AP Comp. Sci. exam you need to know how to run for-loops through arrays. Just learn what an if statement is, what a while loop is, then what a for loop is. Then learn what an array is. Know how to declare your variables. Memorize your main function declaration. Everyday you need to compile some code, because staring at a book and nodding at a bunch of concepts isn't going to get you anywhere. Spend 15 min. trying to understand a new concept and write down what you don't get specifically. You can personally PM me with questions if you'd like.
If you google certain questions about java, you'll inevitabley go through tutorialspoint and stack overflow questions; they're good online resources to understand things, and look at the example code and copy it down even if you don't understand it and compile. Don't jump to people as a resource until you've put your fair share of trying to understand a concept.
I have taken a few Udacity courses and they are well made. They have a C++ course (both a free one and a paid nanodegree). Udacity C++ Nanodegree
Coursera has a cyber security specialization which looks pretty good, it includes four courses which cover different aspects of security. Could be a good way to get an overview then decide what you are interested in delving further into.
Knowing both, I would definitely recommend starting with python (it is easier and simpler to grasp). Java is a very close second but it has a steeper learning curve.
Here is a good article about learning computer science that I find very useful if you're just starting out
Here is a good free course on udacity to start learning python
Honestly, just check out the wiki page on CompSci: https://en.wikipedia.org/wiki/Computer_science
That'll explain a lot more than any of us can post here. Computer Science is a broad topic that includes a lot of discrete mathematics, computer hardware and circuitry, logic, the study and design of algorithms, etc.
If you enjoy analyzing problems, designing solutions, writing code, only to run into more problems, solve those, and integrate it all together, then you might like a career in CompSci!
If you want a jump start on your peers, check out Coursera's intro CompSci course or something similar: https://www.coursera.org/course/cs101
What I use for C++:
Text editor: Sublime Text 2.
Compiler: GCC 5.2 (or most recent GCC).
I'm not a big fan of learning programming from websites, but I'm sure you can do some snooping and find nice textbooks online.
Specifically for a beginner, I'd recommend Savitch's Problem Solving with C++
Once you feel like you understand the basics of programming, you can look at Main and Savitch's Data Structures and Other Objects Using C++.
These are fantastic resources that will help your C++ journey.
Just doing some google searches for these resources or even websites will be helpful.
Pre-cal can be found on youtube.
I really like cybrary.it for basics of network/computer security, and the courses are designed by skill level and goals (CompTIA, ethical hacking, etc). I haven't done any of the certification exams, but used them for baseline knowledge to help me with my degree and help focus my interests in CS.
Just a pointer. The DNS entry is still managed by GoDaddy.
From their site:
>If you want to keep your domain name with the current registrar, inform the registrar to update the name servers for your domain to the ones associated with your hosted zone. If you’ve registered a domain name with Route 53, your domain name will be automatically associated with the correct name servers.
​
Do yourself a favor, skip GoDaddy. I'm sure others will chime in. Just no GoDaddy.
Someone will probably give you a java specific answer that works exactly for your current situation, but in the mean time here is a generic answer: https://www.wireshark.org/ You can use Wireshark to diagnose the pipes.
Check out http://www.codingbat.com, specifically the AP section. They have really helpful quick problems that you can do for as little as 5 minutes to a couple hours. If you need some more help, shoot me a PM (I'm also in the class).
Javascript and Java have nothing to do with each other, except the name.
Java is a language running on the JVM, a runtime an user needs to install in order to run Java programs. Javascript is an unrelated language that is used on the web to script web pages.
You don't need Java to run JS, what you need for JS is a web browser.
You seem really inexperienced, so I recommend the easy way: HTML, CSS, JS. You can learn all three from htmldog.com (there's also codeacademy and w3schools, but I don't think very highly of them). There's also html5doctor.com, but it specializes in HTML only (version 5 of HTML, obviously).
Make sure you do lots of excercises in JS though. The above sites will teach you, but you'll forget everything if you don't practice it. A source of excercises is /r/dailyprogrammer , and also projecteuler.net.
Also add http://developer.mozilla.org/en-US/ to your bookmarks, it's the most detailed reference for HTML, CSS & JS right now (although there are some new players in town more recently that are still too young to be usable). When you have any questions about web development, go to mdn, chances are you'll find your answer after some digging. And for fuck's sakes, do yourself a favor and make sure you use the latest version of a decent browser like Firefox or Chrome, not Internet Explorer.
/r/cscareerquestions
> What should I do on the side to make me as competitive as a computer science graduate
Some common resources:
http://www.crackingthecodinginterview.com/
There's also buttloads of .NET/Javascript/Swift bootcamps around that can land you a job. They don't come cheap though and it's hard to separate the wheat from the chaff in terms of "good bootcamps".
> what can I bring as tangible proof to a future employer to show that I'm qualified?
Put together a really solid online portfolio. Make your own site, chuck it all on github, whatever. Understand that your portfolio needs to supplement a 4-year degree in terms of basic marketability. It should look really damn good and have some impressive-ish works.
That's right, and it won't be learned in a week as OP wants. There's a "30 days of code" on hackerrank which I suggest to cover the basics, and that'd cover the entire semester. The most important part to learning your first programming language is to INDEPENDENTLY solve LOTS of problems
Here is a good place to go to practice programming. Most of the tasks are short, and you can choose a few topics to work on (algorithms, java, mathematics, etc.). This site won't teach you much explicitly, but it will outline different tasks to do. With programming the only way to get better is to do it over and over again. The added benefit is that you can do all the higher level language questions in most languages. Other than that I can give you a few different ideas off the top of my head.
If you're looking for a fun introduction to some web programming (JS, HTML & CSS), i would recommend freecodecamp. They offer over 2500 hours of free tutorials and projects. They teach you everything you need to get started in the web programming sphere. They also offer plenty of project challenges for you to practice your newfound skills on. The community is really awesome as well, I've gotten a lot of help from their forums/irc. If you compete a certain amount of work they award you certificates that you can add to your LinkedIn. Really solid free opportunity imo.
Yes. It is excellent at building a good CS foundation. After taking this course i would recommend a decent data structures and algorithms course or book. Here is a decent list of 8 Books on Algorithms and Data Structures For All Levels
data structures and algorithms are endemic to converting that which is in the problem space to the solution space. Regardless of programming language or operating system or hardware.
For assembly, this is the "textbook" we used. Our professor was very passionate about the actual architecture/layout of a cpu and explaining what's happening in assembly which this book doesn't go over as much. We never really used it for lectures, but we're allowed to bring it for tests/labs because it covered all of the assembly programming and had very useful information. Really makes you appreciate the higher level languages like Python or even C.
> From logic gates to C
Do you mind putting the full name of the book and it's author? I can only find this when I search "From logic gates to C" https://www.amazon.com/Digital-Systems-Logic-Gates-Processors-ebook/dp/B01M63HPNT
I hope I'm not out of line with any assumptions i.make but you NEED a solid understanding of discrete mathematics. https://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328 cover most of what you need. For data structures and algorithms this open source free course beats any online course I have seen yet AND covers all of what most colleges need: https://opendsa-server.cs.vt.edu/home/books
If you really want to know C and assembly and how a processor works you could read this and do the projects. Its what they use at CMU. Theres a huge lab where you implement a y86 processor (mini x86) in C and other things like implementing malloc from scratch in C. Really horribly nasty shit.
https://www.amazon.com/gp/product/013409266X/ref=dbs_a_def_rwt_bibl_vppi_i0
I don't remember if I read that as well or just skimmed through it, but "The Clean Coder" is not about writing code, it's about working as a coder and the interaction with people around you. Writing good code is just one part of being a professional, this book covers the social aspects which are equally important.
See "Readers will learn" on amazon (click: Read more). I would only recommend it to someone who has worked as (or with) a software developer so you can relate more.
That's why a lot of people get VPN's, they ensure that ISP won't see what are you up to on the internet, VPN's encrypt the traffic and you can feel absolutely safe. Of course you need to get a good quality VPN to be secure, that doesn't keep logs. I could recommend NordVPN, that's the one I trust, maybe there is more, but I tried only Nord and sticked to it.
I can help somewhat. I'm a CS PhD who's held on to all of my textbooks. The caveats are:
>Design and Analysis of Algorithms I, Credits: 3.00 > >Design and Analysis of Algorithms II, Credits: 3.00
Two courses, one book: Introduction to Algorithms by Cormen et al. It's massive and thorough. I recommend keeping it after the courses, as it's a useful reference.
> Theory of Computation, Credits: 3.00
Introduction to the Theory of Computation by Sipser. The gold standard for the subject.
>Modern Cryptography, Credits: 3.00
Cryptography: Theory and Practice by Stinson
>Principles of Database Systems, Credits: 3.00 > >Advanced Database Systems, Credits: 3.00
Fundamentals of Database Systems by Elmasri and Navathe. Advanced might cover some topics from later in the book, but would likely revolve more around le
> Compiler Design and Construction, Credits: 3.00
Only one book worth reading for that one, the Dragon Book.
I have heard it is a fine book. Like the other poster said, Introduction to Algorithms is basically the standard introductory text.
I don't think you can go wrong with buying either, or both...
The Structure and Interpretation of Computer Programs, available for free on mit's webpage https://mitpress.mit.edu/sicp/full-text/book/book.html
(or if you prefer the pdf version, https://mitpress.mit.edu/sites/default/files/6515.pdf)
The Land of LISP - A language that every new language just keeps trying to reinvent. Teaches concepts that will make you a great programmer even if you end up using a different language; plus the books is fun to read and has a comics and code to make games!
The Cathedral & the Bazaar
SICP (Structure and Interpretation of Computer Programs)
The Mythical Man-Month
PAIP (Paradigms of Artificial Intelligence Programming)
The AI book is pretty much "Artificial Intelligence: A Modern Approach". The second edition is usually available very cheap on Amazon.
I think if you wanted something more indepth, you'd probably have to get books specifically for those exact subtopics.
I've watched a lot of thenewboston's Java tutorials on YT, you can also go to pluralsight (paid) for some instructional videos. I also have a book - Head First Java, which teaches you about the different things and java and gives prompts and such for skill level.
Other than this, you can check out /r/learnjava, stack overflow, and codecademy has a java course as well (free but also very basic).
Best video you can watch. Learn how to apply this and you will be solid. No pun intended.
You will get a lot from that video, but the book Clean Code changed the way I write software. Similar concepts but I think all engineers should both see the video and read the book.
For the working engineer there are two books that I find absolutely essential for learning about algorithms and performance and one book about how to write code more efficiently.
The two books on algorithms are "Introduction to Algorithms" and "The Algorithm Design Manual". These two books will teach you everything you need to know about algorithmic performance and how to think about finding the most efficient solution.
The best book I've found on the art of coding and how to do it quickly is "The Pragmatic Programmer". This book goes over the skills and efficient techniques senior engineers use to produce code faster. A lot of coding quickly is about what tools you use to help you. Do you use an IDE? Do you use grep/search to your advantage? Are you familiar with the debugging tools? And so on.
A computer science degree will teach you a lot of these skills but also give you a lot of knowledge. Since you are already working and have a master's I can't recommend getting a CS degree. Reading the above books and any books on domains you are interested in will be the best course of action.
IMO, the best book is the Introduction to Algorithms from MIT press. It has a great combination of being an introductory book and offering a deep and wide treatment of the subject. It is also one of the clearer book (in terms of explanations) I have ever read. I cannot recommend it enough.
Artificial Intelligence: A Modern Approach is a good book to start with for AI. Not sure about robotics. I think that's more in the ECE domain.
Someone posted relatively the same question yesterday.
>Either Java or C, OOP, algorithms and data structures, PHP and SQL, mathematics.
>Just try to get familiar with those concepts. Try to write some code every day.
Some books: Introduction to Algorithms, Java in Two Semesters, Logical Reasoning a First Course.
You can find plenty of stuff online as well. There are some sites listed in the sidebar.
I'd highly recommend Artificial Intelligence: A Modern Approach by Russell and Norvig. It's the standard introductory textbook and for a good reason. It provides a brief history of AI research and covers the classic AI "subproblems" in decent depth, and you can follow on the references in it if you want to learn more about anything in particular.
Here are my professors slides. They may help you out. Threads are discussed in process.pdf. Best of luck! https://onedrive.live.com/redir?resid=19FFD96F647EED35!31597&authkey=!AAeK36-JhadbQ6s&ithint=folder%2cpdf
These slides may also help you http://www.cs.siue.edu/~stornar/php/buildContentsTable.php?crs=cs312&fld=notes
No it doesn't come with a default compiler. You will have to download those, thankfully you can download them on VSCode. This webpage explains everything in finer details: link
Sorry I should have mentioned that important detail.
This is the beauty of VSCode, you can code in any language as long as you have the compilers for the languages that require it.
I can't really read your post, because I'm on mobile but I would recommend:
http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628
And I think I saw intro to algorithms on your list
Also: Get git (the spelling is correct). Git is a source code control system, and these are very important. There is a learning curve, but it is worthwhile. A lot of companies use it.
You can find it (along with a free ebook) at https://git-scm.com/
I really like Dale Skrien's book: https://books.google.com/books?id=1lwPAQAAMAAJ&q=dale+skrien&dq=dale+skrien&hl=en&sa=X&ei=lfrpVNDYCsargwTq6YDQAQ&ved=0CCgQ6AEwAA
I have used it to teach OOP four times and it does a really good job covering things like when-to-subclass.
Unfortunately Georgia Tech doesn't really offer remedial courses themselves, tour there is one course they seem to encourage students to take this course if they want to take Advanced Operating Systems: https://www.udacity.com/course/gt-refresher-advanced-os--ud098
Otherwise, you would want to try and take courses elsewhere if you want the formal background.
This course on coursera was great https://www.coursera.org/course/hwswinterface
I don't know when it will be run again (one of the professors died recently, so maybe they don't want to run it again), but the book they suggest in the "suggested reading" section was very good
You could also checkout this course: https://www.coursera.org/course/proglang
This course is profoundly insightful. Changed my life :)
Another good one:
https://www.edx.org/course/paradigms-computer-programming-louvainx-louv1-1x#.VO_Sh1PF-Hw
There is an experimental browser called beaker which does p2p decentralized sites.
I’m not sure if there is much development happing there but if you check out some of their talks on YouTube it’s interesting to learn how they pulled it off.
Also, more recently the brave browser has integrated with IPFS. https://brave.com/ipfs-support/
You just need to use the right representation of your numbers. For instance, if base-2 floating point numbers are not maintaining the decimal precision you want, you could use a Decimal 64 instead (https://en.wikipedia.org/wiki/Decimal64_floating-point_format).
If your language has a type for rational numbers and that's what you're working with, a rational representation would be better.
For arbitrary precision, many languages will have a library for that, but computing with arbitrary precision data types will be slower than those supported by the processor. For example, Go has https://golang.org/pkg/math/big/
Learn the fundamentals first; math, logic, linear programming, graph theory, control theory. Don’t worry too much about programming languages or tools at the beginning. Stick to one you like and learn it well. Learn algorithms, relational algebra then SQL then no-SQL. Take online tutorials. There are a huge number of them online, many free (check this: https://www.freecodecamp.org/news/coronavirus-coursera-free-certificate/ ). Be patient, get involved, help others. Good luck my friend.
Hey OP, which one did you end up going with? I found this post searching for the same answers myself. I, too, was looking at coursera's stanford course, as well as edex.org's harvard (already mentioned below), and udacity's intro to computer science course.
A while back there was a post with lots of free machine learning e-books, which I downloaded and reuploaded here (mainly because I'm too lazy to find the original post). The .7z file in that folder has all of them compressed to 76mb if you want a single download.
However, someone else will have to tell you which of them are the best because I never got round to reading any of them.
I'd also recommend the popular Stanford course on Coursera.
Learning about algorithms is fundamental if you ever want to do something that a high-level library like pytorch or sklearn can’t do out of the box.
Also, on the deep learning/machine learning side, the Goodfellow book is fairly theoretical. There is an excellent practical book on deep learning available from some of the folks who made pytorch, which I highly recommend working through in parallel with the Goodfellow book: https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdf
Listen to this episode of The Laracasts Snippet, you'll be fine :)
I felt like this too, but what saved me is that I made peace with the fact that I will never be able to know everything or have all the knowledge and just start building things and learning from my fuckups.
It's very commonly held that the language you start off with doesn't matter, but I actually assert a hard contrarian viewpoint. I believe that it actually is a bad idea, in general, to start off with either C or C++. I find that most people who disagree do so because they themselves started with it and they either feel that if they can do it, you can too; or they feel like you have to go through the hazing that C/C++ puts you through in order to become a "real" programmer.
Don't get me wrong, you should definitely learn those languages! They are essential to know if your plan is to make a living programming. However, they are decisively terrible languages for beginners. As a beginner, you're priority should be to become acquainted with the fundamentals like loops, variables, and conditionals; as well as how to use these fundamentals to express your ideas and logic. However, I argue that the more important objective is to learn how rewarding programming can be and to receive that moment where all of the sudden you can see how many great things you can accomplish with this skill.
C/C++ will rarely ever offer you this. You will find yourself in hell with the most abrasive and unhelpful errors you can get from a programming language. You're experience and learning will constantly be drowned out by the steep learning curves of systems programming when all you're there for is to learn what variables and loops are...
C/C++ should, in my opinion, be the second language you learn. Your first should be a higher level language such as Python (if you'd prefer to experiment with more technical programs or automating tasks) or processing (a great language if you appreciate visual feedback). Once you get comfortable translating your thoughts into control flow, then you should consider yourself ready to learn about the intricacies of memory management to get a closer look at what goes on under the hood.
The first result on Google is ok.
There really aren't many good tutorials for learning asm. There are however some good books out there.
What is your goal for learning asm? If you have one in mind, searching for blog posts about that goal is usually the best way of finding good resources.
I would reccomend http://x86.renejeschke.de/ as a reference for the x86 instruction set. (since it looks like you're just getting started)
> probably includes more math
How so? If you need to do any math, you put the formula and the computer does it for you. If you need to know the formulas, they should have probably already been taught in a math class.
Coding is more about learning programming concepts (control structures, possibly data structures) and logic (including truth tables).
Young kids can learn with something like Scratch, https://scratch.mit.edu/
Older kids can learn with something like Python, which is widely used and generally easier to learn than other languages.
Again, learning the basic concepts is a skill that benefits many people. Does it help every single person? No. Will every student want to or like to learn it? No. But again, you can say the same thing about math and writing. It doesn't change that is something beneficial to teach to students.