Skip to content

tamirh/howtotech

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Getting Started in Tech

The hardest part.

This is what helped me.

Day9 used to be a Starcraft commentator, now he does various gaming YouTube stuff. He's a great positive persoanlity, and a long time ago, he did a video that was pretty impactful for me. It talks about mostly his Starcraft career through school, but hits on a lot of different topics: https://www.youtube.com/watch?v=NJztfsXKcPQ (2hours long almost).

Day9 30 Day Project Challenge : https://www.youtube.com/watch?v=oFmTP4gR7Yg

PROGRAMMING

There are a million ways to get into programming, it mostly depends on how much theory you want to know going into it before getting down in the weeds.

When it comes to programming languages, it's eventually important because each one will have different applications, but for learning they're all essentially the same. The syntax will be different, so will the libraries of what's built-in to the language, but you learn conecepts once and they'll generally apply to everything.

Topics

There are many ways to approach learning Computer Science/Programming. You can start out with more theory or start out learning some languages and getting hands-on. You know how you learn the best.

Theory

  • Data Structures - Basic data strucure knowledge is super useful in any language. You don't have to know all the math behind them, but suggest some class or brush up on data structures because you'll be using that knowledge everywhere (especially in interviews).

  • Algorithms - Sometimes lumped into Data Structures classes. Depending on how you learn, and how the class is taught this can range from abstract math proofs, to a list of useful common methods for solving problems. As you learn you'll pick up a lot of what would have been useful from these classes.

  • Design Patterns - More just proven ways to approach certain problems. Not something to worry about early on, and if you're reading other code, you'll learn, but sometimes nice to formally see a lot of different options for solving problems laid out.

  • Machine Learning - The hot "new" thing. This has dominated CS and multiple fields have esentially been collapsed because of how powerful/applicible it is. Computer Vision for instance has all but been superceeded by ML. It has become so ubiquitous that you can learn it from any angle (pure theory all the way to pure application).

Languages

There's a language for every application, but a few have dominated in particular domains. When you're first learning, the syntax will be difficult, but that will get easier as you learn more and more languages. 90% of what languages do is exactly the same, so what you learn in one generally applies to others as well.

Defining Characteristics of Languages

  • Low Level: A language that gives you essentially 1:1 control over what the CPU is doing. Assembly languages are the most extreme version of this, where you are literally giving the CPU the instructions it reads directly. If you go by strict definitions, assembly languages are the only low level languages, but most people consider C a low level language as well.

  • High Level: A langauge that abstracts away the more fiddly bits so you don't have to worry about them. This is probably 99% of what people use nowadays.

  • Compiled: A language that needs to be converted into a binary file (.exe on windows) to be run. It can only be run on the platform it was compiled for (windows, mac, linux, etc).

  • Interpreted: A language that is esentially compiled on the fly. You distribute the code to any platform, and it will run it.

  • Byte Code: A sort of mix between compiled and interpreted. Code is converted from its text form into a intermediary point that can be read by any platform that supports it. The intermediary point is not human readable anymore, but neither is it readable by the CPU directly. It must be read by another program which will execute the instructions on the fly.

  • Libraries/Frameworks: A library can be anything, it's basically a bundle of useful code that someone else has written. A framework is basically the same thing, but a bunch of related libraries that all work together. Various languages have different built-in libraries or large easily accessible downloadable sets of libraries. These can range from the basics of data structures to libraries that will perform statistical analysis, make graphs, or perform web requests.

Common Languages

  • Python - Great starting language, super powerful (used from data science to scripting to machine learning).

  • Javascript - It is everywhere (even if it shouldn't be). The defacto web language for years, so many things are built off of Javascript and extensions added on top of it. Anything running in your browser is probably Javascript. It's also leaking into other client applications because so many people know it. If you see j or .js -- those are Javascript libraries.

  • C# - Based on C/C++ syntax, but designed from the get-go to be a higher level language. Used both on the server side and for client applications. Designed by Microsoft, but it's open and works on most platforms.

  • Java - Based on C/C++ syntax, very similar to C#. Going out of favor now, except that it's the language of choice of Android applications. Not to be confused with...

  • PHP - Falling out of favor, but a very easy to start using server side scripting language. Easy to embed into HTML and make dynamic content for your website.

  • Go / Golang - New(ish) server side language developed by Google. Used more for backend stuff.

  • C/C++ - Not as common today as it was 10 years ago, but they have stood the test of time. Generally used in places where applications need high performance such as games, or on low power/embedded devices that don't have much processing power. C is fairly low level and C++ straddles both realms, letting you be low level where you need and higher level where you don't. Will run on basically any platform, but you need to compile it for each one.

Common Not Languages

  • HTML/CSS - Not really a programming language, but you'll need to understand markup and how to style that markup to display anything.

  • JSON - Again, not really a language, but it's the go-to way to format data for most web applications. It's human readable, and easier to parse than HTML.

  • SQL/NoSQL - The most common way to talk to databases. Very useful. Very annoying.

Portfolio / Learning Projects

The best way to show a company you know how to do something is show them your portfolio. Gets you through the door to interviews better than listing off what degree. Can even be more impactful than where you've worked because it's sometimes difficult to suss out what an individual has done versus what their team was responsible for. A couple different project ideas, but by no means an extensive list.

Game

Can range in amount of programming required from almost nothing to very indepth. Can explore lots of specializations like sound design, shaders, particle effects, animations, character design, art, physics, etc.

  • Unity: You can do quite a lot with the built-in tools, and assets you download from their marketplace. Uses C# for any scripts you want to write for custom logic.

  • Unreal: Primarily focused on 3D games. Has a visual scripting language you can do most things in, but if you need to write custom code it will be C++

  • Game Maker Studio: Focused on 2D games. Has a visual scripting language. Uses their own scripting language for custom stuff.

Website

Can range from static, very design and aesthetic focused, to backend and data driven. There are a tons of extensions and addons you can use, so it's a bit daunting on where to start. Just choose something and go. The particular technology you use isn't all that important at this point.

  • Responsive Layout: Use CSS to design a page to seamlessly resize and relayout to work on different devices. Something basic like a one-page blog, or image gallery.

  • Javascript Basics: Create a website that responds to user input and does something with the data. Recreate the 2020 census website with branching paths on data entry and validation.

  • REST/API Usage: RESTful architecture basically tells you how to interact with a server who is giving you some service/data you need. It's basically token based, so the client keeps track of its own state because so the server doesn't have to worry about keeping track of everyone making requests. Find an API you want to use and make a frontend for it. Google drive, giphy, or something else you use on a day-to-day basis and you can find they have a public API.

Resources

Coding Challenges / Interview Prep

Online Classes

LOTS of options here, many of them free and college-level quality.

Freelancing

QA (Quality Assurance)

LOCALIZATION

About

Getting started in tech

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published