Colby Leclerc
Mostly technical ramblings with the occasional tangent


Intro to Programming

Overview

To start off, it’s best to have more structure when introducing a topic, especially programming. Once the basics are understood, you can take a looser approach to learning what you find interesting about programming, as you’d have most of the common vernacular to understand typical guides and such.

Starting off with Python will be a great way to learn the concepts, without having to worry about the nitty-gritty of less abstract languages. Once you have the basics down, looking at other languages will be easier, and more fun.

As a slight introduction, software applications are broken up to different segments. We’ll go over the basics, but for a highly scalable (grow capacity robustly and efficiently), robust system that serves millions of requests per second, the architecture will look far different, but in the end they have the same essence.

Note you won’t need to know/remember this to begin the course, but if these topics are referenced, it’s a good primer. Don’t worry about knowing everything here, it’s just to expose you to the concepts.

Feel free to skip to Tech news, forums, and discussion boards if it’s going too deep to start with, but it’s here for when you want to learn more. Don’t worry about knowing all this at the start. I’d be happy to answer any questions. Living this for a decade has made most this info second nature, so it’s hard to realize where to start sometimes

Anotha Note: I’m being picky in what I call a programming language, vs a markup language, and general purpose languages vs domain specific languages (you’ll see below), because when asking questions on forums and such, many tech people have a personality of pointing out the minute flaw in your question. I think its part of the nature of a programmer, since one small syntax error will break a program, so we’re trained to see small mistakes/misunderstandings. Some people don’t, but just know that “HTML is a programming language” is a meme, and saying this could invoke a flame war in some forums lol

This image from Khan Academy is a good representation of the basic layout Diagram

Front end

Front end is what you see when you go on a web page, on any computing device.

HTML (a markup language, not a programming language: HyperText Markup Language) and CSS (Cascading Style Sheets) are used to display elements on the page, with JavaScript (a scripting language (re programming language)) used to do more complicated tasks on the page, and enhance functionality.

HTML is the core framework of what you see, CSS is used to style the page (colors, gradients, sizing, spacing, margins, padding, etc), and JavaScript greatly enhances these aspects, while also bringing functionality that otherwise wouldn’t be possible.

Backend

Backend is where most the of fun occurs (at least for me). Here, anything the client (front end) sends to the server, is processed, then typically stored. Further, the backend is where compiled languages usually rule the land.

JavaScript was recently “ported” to the backend, by ripping out the engine used in the frontend, and doing some reworking to allow it to be used for backend processes. This is called Node.js, which again you don’t have to worry about. It’s not its own language, just JavaScript with extra flavor.

Once the server, or backend computer, receives data from the client, it’s then processed and stored. Storage typically is done via a database. Essentially a database (DBMS: Database Management System) is a program that sits in front of files where data is stored. The DBMS is also a server, which can be connected to, and request sent to/received from. The job of a DBMS is to take in data, and efficiently store, retrieve, and save the data reliably.

To interact with a database, they have their own language, called SQL (Structured Query Language) (for a specific DBMS flavor called relational databases. Don’t worry about this for now, but this is the most common type). This DSL (Domain Specific Language. GPL, General Purpose Language, is what JavaScript, Python, Java, etc are. So SQL is not a programming language) Learning this is far easier, as the language was designed for business folks to query data with minimal programming experience. In larger data sets, this is a job in and of itself.

Different flavors of DBMS exist for different use cases. The most common you’ll see are MySQL, and PostgreSQL. Others are MongoDB, GraphQL, OracleDB, MSSQL (Microsoft), etc. After the intro course, it would be ideal to learn some database work as well. Typically the next topic would be how to connect to a database, as most real-world situations require this interaction.

Version Control Systems

When writing code professionally, ideally there should be a way to track changes, go back and view history, and merge code when working with a team, and on multiple features. The most popular solution is Git. The old solution was Subversion. You’ll see Git referenced a lot, and when downloading code snippets will find GitHub, a hosting platform, used as well. There also exists GitLab, which is similar to GitHub.

Don’t worry about this for now, but know that Git is the technology, while GitHub and GitLab are products that are wrapped around the technology. Git is free and open source, while GitHub and GitLab have pricing structures outside their free offerings.

Fun fact: the person who created Linux, also created Git (Our lord and savior, Linus Torvalds)

Tech news, forums, and discussion boards

As you know with Reddit, if there’s a question asked that can easily be Googled, the shit brigade will be out to attack. With some tech boards, and especially on specific sub-topics, this tendency is magnitudes higher.

To successfully ask a newb question, typically a format that follows will garner responses. Even low quality responses, will typically be bountiful.

  1. Outline the problem you encountered
  2. Mention what you’ve tried, and if applicable, provide the source code, the output, and any relevant environment details. As you learn more, these details will become more easily recognized.
  3. Mention what you searched, and why it didn’t work. Or better yet, what your thought process was to search it.

StackOverflow.com

StackOverflow was the first of the StackExchange platform. StackExchange is a large aggregate of question-and-answer websites in many topics, from politics and literature, story world-building and grammar, to niche mathematics and various STEM subjects.

StackOverflow is notorious for a poor community response to duplicate questions. Try your best to search for the answer before posting, else your post will be marked duplicate, and you won’t get any response. I don’t really participate on the site for this reason. Though I do visit it often, and so do most every developer.

It’s a meme to use StackOverflow to save programming projects. When you use the answers, be sure to understand why it works. Most answers with high upvotes are very high quality. I’ve learned an enormous amount from the site.

StackOverflow

Techmeme.com

Techmeme came out in ‘05, before meme was mainstreamed. Here you’ll find an aggregate of news topics related to the technology world. I don’t visit this often, as most news I’m concerned with I can find on HackerNews (mentioned below). The site is hugely popular in the startup/tech world, so it’d be good to skim from time-to-time

TechMeme

HackerNews (news.ycombinator.com)

This is the news site that is hosted by the startup incubator, YCombinator. The site looks old, but its beloved by it’s readers, for being fast (because there isn’t much to load besides plaintext), few features (apps tend to get more features than needed, which leads to a bloated experience), and is very mobile friendly with no advertisements or heavy tracking.

I’ll visit this site multiple times per day, every day. Most notable news in tech, and science, will appear here. It isn’t really related to hacking per se, but you’ll find cool case studies that DarkNet Diaries will probably pick up in a few months. Here the bleeding edge of tech news is posted, so sometimes its exciting learning of something so early.

Especially with regards to computer security, you’ll learn about breaches, hacks, and CVE’s (Common Vulnerabilities and Exposures: essentially a document outlining the vulnerability, along with a unique identifier. Typically hacks will also have a human-readable name (re: heartbleed, SHAttered, ILOVEYOU, etc)) here first.

The comment section is NOT like reddit. It’s highly moderated in a good way, where low quality posts are voted down (the amount of downvotes correlate to the gray-level of the comment. i.e. the comment will appear to have lower opacity as it’s downvotes to upvotes ratio accumulates). Comments can more often be higher quality than the posts themselves. Its an amazing litmus test, because highly educated people in most any science subject will chime in if the slightest sound of BS is heard. Even the most esoteric topics will tend to have at least one expert. Sometimes CEO’s of tech sites will come on, like of Quora, DropBox, DigitalOcean, etc.

Signing up won’t allow you to downvote right away, to prevent abuse. But with enough karma, you’ll be able to. I didn’t start posting till recently, so I went years just fine.

Lastly, theres sub sections, as follows:

Ask HN: User will pose a question to the community. Think AskReddit

Show HN: User will share their app/idea/thing, and the community will respond

If there was only one site to go on for news, it would be this.

HackerNews

Learning Programming

Prelude

Here’s the good stuff. As mentioned earlier, I’d start off with a basic course, which uses Python to teach the basics of programming. Once the basics are down, and nomenclature at least partially known, it’ll be easier to chart your own path.

Some things to note, which the course should discuss:

Documentation: Documentation is a pivotal trait of good software practices. From a development point of view, most all pieces of software, be it a language, an app, library, framework, etc will have documentation. It’s quality is different, but if the software developers want anyone to use their product, it’ll require documentation. When starting out with a new piece of software/library/etc, refer to the documentation first, especially before asking questions on forums, else they’ll just link to the docs.

Python Documentation Technically, you could learn the entire Python language through these docs alone. Once you learn the basics, the docs will all you’ll need, usually, to pick up a language. Good documentation also includes examples, which is how I learn best. Fortunately, the PyDocs have tons of examples.

Python went through a major version change, were code from one version wasn’t backwards compatible with another. You’ll see this referenced in answers and such, so be sure to check the date of answers, and if the correct version is referenced. Versioning occurs as follows:

Major.Minor.Revision If the last number, revision, is left off, assume it’s at revision 0

The break-point was from Python version 2.7 -> 3.5. This means that, for the most part, scripts created with Python 3.5 (depending on what functions are used) must be modified to run on Python 2.7 (thus a ‘breaking change’, making new scripts written in Python 3+ not backwards compatible). There are some exceptions, and ways around it, but for our purposes, stick to version 3.5 or higher.

Courses

I haven’t done these courses, but they seem highly regarded

Edx: Intro to Programming with Python

Reading over the syllabus, this seems like a good start. It’s free, you don’t have to do assignments/quizzes, but it’s highly recommended.

Edx Course Page

Syllabus

Edx: General Courses

Here’s a good list of courses to take if any interest you, once you have the basics down Edx Page

python-guide

Here’s a great site to find specific help on certain actions/functions/data structures from python-guide. I’d click Python Basics and view the examples for whatever you’re searching. After, you can explore.

python-guide

w3resource

This site has guides and examples for probably most any programming language you’ll find in modern production. Here’s a list of what they support

Python Page

Conclusion

That should be a good head start. If there’s a specific domain, sub topic, or area of interest, I can write something up for that as well. Once you have the general feeling for programming, and understand what jobs you might want to look into, I’ll have a better sense of what technologies you should learn, how to prepare for those types of jobs (as it relates to the programming), and what to display for interviews to demonstrate that you have sufficient knowledge.