#computer science
I’ve said this to my non-techie friends countless times. It’s no secret that being able to code makes you a better job applicant, and a better entrepreneur. Hell, one techie taught a homeless man to code and now that man is making his first mobile application.
Learning to code elevates your professional life, and makes you more knowledgeable about the massive changestaking place in the technology sector that are poised to have an immense influenceonhuman life.
(note: yes I realize that 3/5 of those links were Google projects)
But most folks are intimidated by coding. And it does seem intimidating at first. But peel away the obscurity and the difficulty, and you start to learn that coding, at least at its basic level, is a very manageable, learnable skill.
There are a lot of resources out there to teach you. I’ve found a couple to be particularly successful. Here’s my list of resources for learning to code, sorted by difficulty:
Novice
Never written a line of code before? No worries. Just visit one of these fine resources and follow their high-level tutorials. You won’t get into the nitty-gritty, but don’t worry about it for now:
w3 Tutorials (start at HTML on the left sidebar and work your way down)
IntermediateNow that you’ve gone through a handful of basic tutorials, it’s time to learn the fundamentals of actual, real-life coding problems. I’ve found these resources to be solid:
Difficult
If you’re here, you’re capable of building things. You know the primitives. You know the logic control statements. You’re ready to start making real stuff take shape. Here are some different types of resources to turn you from someone who knows how to code, into a full-fledged programmer.
Programming problems
Sometimes, the challenges in programming aren’t how to make a language do a task, but just how to do the task in general. Like how to find an item in a very large, sorted list, without checking each element. Here are some resources for those types of problems
Web Applications
If you learned Python, Django is an amazing platform for creating quick-and-easy web applications. I’d highly suggest the tutorial - it’s one of the best I’ve ever used, and you have a web app up and running in less than an hour.
I’ve never used Rails, but it’s a very popular and powerful framework for creating web applications using Ruby. I’d suggest going through their guide to start getting down-and-dirty with Rails development.
If you know PHP, there’s an ocean of good stuff out there for you to learn how to make a full-fledged web application. Frameworks do a lot of work for you, and provide quick and easy guides to get up and running. I’d suggest the following:
Conclusion
If there’s one point I wanted to get across, it’s that it is easier than ever to learn to code. There are resources on every corner of the internet for potential programmers, and the benefits of learning even just the basics are monumental.If you know of any additional, great resources that aren’t listed here, please feel free to tweet them to me @boomeyer.
Best of luck!
I’d also like to add some more specialized resources!
Video games:
Easy game engines (virtually no coding):
- Game Maker Studio (2D; free and paid versions)
- GameSalad (2D)
- RPG Maker (2D; numerous versions ranging from free to $69.99)
- Stencyl (2D; free and paid subscription versions)
- Scratch (good for kids and is more general; 2D; free)
More difficult game engines:
- Unity (lots and lots of platforms; C# and JavaScript script; 2D, 3D, VR; free and paid versions)
- Unreal (specializes in graphics; C++ and visual script; 2D, 3D, VR; free with a royalty on successful products)
- CryEngine (Lua script; 3D; paid subscription and full license versions)
Mobile game development:
- Corona (free and paid subscription versions)
- SpriteKit (2D) and SceneKit (3D) which are built into the official compiler to create iOS apps (see iOS apps for more resources)
- also all of the above game engines (cross-platform)
Game console development:
- Game Maker Studio (with a paid subscription)
- Unity
- Unreal
- CryEngine
Note that games can also be created on more general platforms like iOS and Android apps, but the resources listed above are specialized for game development.
iOS apps:
In order to develop iOS apps, you’ll need to purchase an iOS developer program membership for $99 a year, which requires an Apple account. Here are some general resources:
- Xcode (the official IDE for iOS apps; can be installed on OS X)
- Start Developing iOS Apps Today (Objective-C)
- Ray Wenderlich iOS tutorials (Objective-C and Swift)
- Code School: Try iOS (Objective-C)
- Developing iOS 8 Apps (2,3,4,5,6,7; Swift)
- TutorialsPoint: iOS Tutorial(Objective-C)
- How to Make iPhone Apps With No Programming Experience(Swift)
- Swift Tutorial: Building an iOS Application (2,3)
iOS apps are developed in the 2 official languages of Apple: Objective-C and Swift, the latter of which is newer and generally much easier to learn.
Objective-C resources:
Swift resources:
- the official documentation
- The Swift Programming Language (free official e-book)
- Swift: A Quick Reference Guide
Xcode also has SpriteKit, SceneKit, and Metal built in, all of which are incredibly useful for creating apps that require elaborate graphics, particularly games.
SpriteKit resources:
- How to Make a Game Like Candy Crush With Swift(2)
- Sprite Kit Swift Tutorial
- Create Space Invaders with Swift and Sprite Kit
- iOS SpriteKit Physics Tutorial in Swift
- Build the Game of Life(Swift)
SceneKit resources:
- Scene Kit Tutorial: Getting Started(Swift)
- An Introduction to SceneKit(2; Swift)
Metal resources:
- the official documentation + other resources (Obj-C)
- iOS 8 Metal Tutorial with Swift (2,3)
- Getting Started With Metal(Obj-C)
- An introduction to 3D graphics with Metal in Swift
Also, in order to publish iOS apps, you’ll have to juggle certificates, app ids, and provisioning profiles. This process can be convoluted at times so here are some resources:
- How to Submit Your App to Apple: From No Account to App Store (2)
- Beginner Tutorial: iOS Certificates & Provisioning Profiles
Android apps:
In order to develop Android apps, you’ll need to register as a developer for a one-time fee of $25. Here are some general resources:
- Android Studio (the official IDE for Android app development; free; can be installed on Windows, OS X, and Linux)
- the official documentation
- Getting Started
- Android Tutorial For Beginners(2,3)
- Learn Android SDK From Scratch
- Introduction to Android Development With Android Studio
Android apps are developed in Java and the layout is coded with XML.
Java resources:
- W3schools: Java Tutorial series
- TutorialsPoint: Java Tutorial
- Core Java Tutorial
XML resources:
- W3schools:XML Tutorial series
- TutorialsPoint:XML Tutorial
For publishing (which is somewhat easier than publishing iOS apps):
3D modeling/animation:
- Blender (can also be used to create games; Python script; free and open-source; can be installed on Windows, OS X, and Linux)
- Maya (specialized script; free trial, free 3-year student subscription, and paid subscription versions; can be installed on Windows, OS X, and Linux to an extent)
- 3ds Max (Python script; free trial, free 3-year student subscription, and paid subscription versions; can be installed on Windows and OS X)
- RenderMan (specialized script; free for non-commercial/educational use and pay-per-license for commercial use; can be installed on Windows, OS X, and Linux)
Misc. resources:
Stack Overflow is an ask-and-answer community for programmers. It’s amazing and will save your life. Sign up and don’t be afraid to ask for help.
Github offers a student pack (here) if you create an account and prove you’re a student. This gives you free access to a bunch of great programming resources for free for a certain period of time, such as Unreal Engine. Also, Github in general is a site that you can host your code on. Other users can see it, and “fork” it to make a copy of your code and modify it.
Parse is a backend service that allows you to store data in databases it hosts on its own servers. It lets you use push notifications, create users, store and retrieve data, etc. It’s compatible with iOS apps, Android apps, Windows apps, Xamarin, React, Unity, OS X, Windows, JavaScript, PHP, .net, Arduino, and Embedded C. It’s free up to a certain limit that depends on the services you use.
Cloud9,Codebox, and Squad are online IDEs that allow for real-time collaboration and support a variety of languages, so they’re useful for team projects.
And some general advice:
- Your program will not work right away, 99% of the time. That’s okay. Do your best to figure out where the error is. Here is some advice on debugging (written for PHP but the methods can be generalized).
- If you’re stuck, Google. Google like there’s no tomorrow.
- Ask questions on a community like Stack Overflow.
- For that matter, browse relevant Stack Overflow questions. You can probably find some solutions there.
- Don’t be afraid to copy and paste.
- Take breaks sometimes if you’re getting burned out. But don’t stay away from your projects for too long or you’ll lose track of its status.
- Backup your code. On the cloud, on a USB drive, wherever. If your IDE has a backing up feature like snapshots, use it whenever you hit a milestone.
- If your project is big, split it up into milestones and set goals. Don’t tackle everything at once.
Like the OP said, coding isn’t just for professionals and “geeks” anymore. Anyone can learn it if you really try, and with the rapidly expanding tech industry, learning coding can really broaden your opportunities.
If any of the links are broken, or you have a question or some information/resources to add, you can contact me through the askbox or the OP through his Twitter (as mentioned in his post).
If you’re interested, try some of these out and best of luck!
Great work expanding on my humble list to include a much fuller collection of resources for learning how to code! Cheers!
25/11/2021
————
Today could have been better :/ But I did do some fun activities
Day 58/?
The National Science Foundation recently awarded Penn State professor of computer science and engineering, Mahmut Kandemir, a $3.5 million grant to continue his research on improving the speed and functionality of Galaxy, a scientific workflow management system. The group hopes that the funding will help them improve the speed and functionality of Galaxy by making the system compatible with graphics processing units.
Read more about the research at Penn State News.
Computer Science Student
An interrupt signals the occurrence of an event the kernel should be aware of. Hardware can trigger an interrupt at any time by sending a signal to the CPU, usually through the system bus; software can trigger an interrupt by executing a system call (also called a monitor call). When an interrupt occurs, the CPU stops what it is doing and transfers execution to a fixed location, which usually contains the starting address where the service routine for the interrupt is located. After the routine finishes, the CPU resumes what was interrupted.
Interrupts are an important part of a computer’s architecture. They transfer control to the appropriate interrupt service routine, which is usually defined in an interrupt vector, or array holding the addresses of interrupt service routines for various devices. Modern operating systems are interrupt driven, and events are almost always signaled by the occurrence of an interrupt or a trap.
Atrap, or an exception, is a software-generated interrupt caused either by an error (division by zero, segmentation fault, etc.) or by a request from the user program for an operating system service.
In x86, the IDT (interrupt descriptor table) provides pointers to interrupt and exception routines.
An operating system is software that manages the computer hardware and provides common services to user programs. They provide an environment in which a user can easily interface with the computer. Operating systems vary widely and often have different goals (mainframe operating systems versus PC operating systems versus real-time…).
A computer system can be divided into the hardware, the operating system, the application programs, and the users. The hardware (CPU, memory, I/O devices) provides basic computing resources. The application programs uses those resources to solve users’ computing problems. The operating system coordinates the use of resources.
A general-purpose computer system usually consists of one or more CPUs and a number of device controllers connected through a common bus that provides access to shared memory. The CPU and device controllers can execute concurrently - thus, a memory controller is provided to ensure orderly access to the shared memory.
A computer must have a bootstrap program, an initial program to run when the computer is powered up or rebooted. This firmware is typically stored in ROM (read-only memory) or EEPROM (electrically erasable programmable read-only memory). It initializes the system - CPU registers, device controllers, memory contents, etc. It also locates and loads the operating system kernel, which is the main component of the operating system.
// To appease the typing gods
( submitted by @jasminenoack)
*Syntax Error* “Ah, there it is.”
*Syntax Error* “Ermmm is it here?”
*Syntax Error* “Arrrg, I give up.”
*colleague comes over* “There it is.”
// submitted by @photofocus-blog1
// This is blatant pandering to the Plutonian gods
( submitted by @skaiawards)
One week before program is due: “I’ve defined all of my classes, I can easily write the code to implement them in a few hours!”
One hour before program is due: “I can not do this it takes more time than I thought!”
// submitted by @kurokatana101
*Building everything properly and efficiently, doing regular tests of individual functions and fixing errors as you go*
“Well alright, everything works alone. Time to test it all together.”
*SERVER CRASHES*
*last backup was an hour ago*
“… so this is how the apocalypse starts. Super duper.”
// submitted by another0ghost
Days into CS100: “Man, this isn’t so hard.”
Days before final: “…I forgot what the header is.”
// submitted by @askcivilization-blog
*working on code that implements a method the professor wrote*
“Why is this not working?! This should definitely work!”
*checks professor’s method*
“He copy-pasted wrong! Of course it won’t work when THE MAIN METHOD IS WRONG!!”
// submitted by thecaptainpetty
*has been staring at and scrolling through code for 20 minutes trying to figure out why its not working*
*fed up* “LOOK I KNOW YOU’RE NOT SUPPOSED TO WORK LIKE 95% OF THE TIME BUT what about that other 5%, huh? Can I program a random generator that’s rigged to only make the code work?”
*suddenly stares wildly off into the distance* “Maybe…”
// submitted by @transcomputational
Programming in Scheme/Lisp “What do you mean ‘no body found in expression’? It’s right there!! Stupid parantheses!”
// submitted by @broadwayuponastar
Program: *Does not do what it’s supposed to.*
Me: “But where is the error?”
Me: *compiles code piece by piece to find the error, while the ‘error in line such-and-such’ remains unhelpful*
Me: *finds the part that throws the error*
Me: “There is no error here…”
Me: *goes through letter by letter*
Me: “…I forgot the array brackets and instead asked for a variable.”
Me: “Why is this throwing an error twenty lines later in a completely different code section?”
// submitted by @whimsilica
When your IDE glitches and nothing works when you know it should work-“What do you meant it’s an error? WTF ARE YOU SMOKING IDE?”
*restarts IDE* “Ohh well would you look at that, everything works, I fucking love my job!”
// submitted by vkmicro
“How to take user input in java”
// submitted by xgigabytesx
When the while loop keeps crashing everything and you can’t figure out how to make it not infinite, and you’re like- “alright, it’s time to contain the beast”
(submitted by vkmicro)
“It works on my machine.”
// submitted by davetromp
(Reviewing a problem with a group of peers before a Java test)
Me: —and you know what a constructor is, right?
Three of four peers: *blink, exhausted*
Fourth peer: No, we weren’t taught anything.
Me: *incoherent squeaking* *erases stuff on white board to make room for a new wave of illegible handwriting*
// submitted by @fourohfourlifenotfound