Skip to content
Search

Programming

lastmod 2026-01-19created 2014-06-1554 edits

Subfields of programming



Web Programming



Game Programming



Multimedia Codec



Image Processing



GIS Programming



Network Programming



Computer graphics



Protocol



Integrated development environment (IDE)



E.T.C

Computer programming, or simply programming (North Korean standard: 프로그람 작성, peurogeuram jakseong), or coding, is the craft of implementing one or more related abstract algorithms as a concrete computer program using a particular programming language. Programming has artistic, scientific, mathematical, and engineering properties.

Which programming language should I choose?

Select_programming_language.png

Genealogy of programming languages

Genealogy_of_Programming_Languages.jpg

Programming Basic

  • Programming:Basic: Programming basics.
  • Sentinel value - A value with a special meaning, used as a termination condition and so on. (not found index = -1, undefined value, etc ...)

Onboarding New Developers

Onboarding makes new hires feel welcome and part of the company, and also reduces turnover

  • 3A : Administration → Assimilation → Acceleration

HR provides the overall guidelines, but it's important that the manager leads the execution

Roles and responsibilities

  • HR : all the support needed to start working
    • Set up onboarding meetings with engineering managers and C-level managers
    • Basic explanation of the tools used company-wide
    • Make them feel welcome on the team
    • First day at work : introduction to the whole company (something like groupware), add user accounts, detailed explanation of pay and working hours, provide all tools and equipment, office tour, suggest lunch with other colleagues
  • Engineering manager
    • Introduce the developer inside/outside the team
    • Introduce the team structure, the team's meeting schedule, development tools, the ticket system, etc.
    • Run 1:1 check-ins, quarterly review meetings, performance reviews, etc.
  • C-level manager
    • Make them feel part of the company and enjoy working toward the company's future vision and goals
    • Ideally, the CEO introduces the company's vision and history, the head of product introduces the product and users, the COO/CMO gives insight into current problems, and the CTO explains the technology roadmap
    • It's important to hold regular meetings where new hires see how their work contributes to the company's long-term goals

Onboarding program best practices

  • Give enough time, lower expectations at first, and don't let them feel pressured

Pre-boarding

  • The time between the final interview and the first day of work
  • Keep in mind that the candidate may be interviewing with other companies at this point
  • At the final hiring stage, introduce the candidate to future teammates, team leads, and managers
  • Once the candidate decides to join, it's best to finish all the administrative work before the first day
  • Things to do a week before the start date
    • Send an organized schedule for the first day : when and where they'll meet whom; for a remote company, login details for the new email and Slack accounts, etc.
    • Complete all necessary contracts and paperwork
    • If you provide equipment for remote work, have the equipment request completed in advance
    • Share detailed information on the company's culture, vision, and mission
  • If you want a more thoughtful touch
    • Have teammates send a short video/GIF message congratulating the new hire on joining, or
    • Simply mail a handwritten welcome note/card
    • If the budget allows, send company merchandise (SWAG, cups/stickers/T-shirts, etc.)

First day

  • First impressions matter. It should be a red-carpet experience for the new hire
  • Aim to make them feel welcome and give them chances for meaningful interaction with their new teammates
  • Get to know each other over an informal coffee with the hiring manager, then clarify R & R and align expectations in a formal check-in meeting
  • Introduce the company and its teams (skimming the org chart is helpful here)
  • Introduce peers or mentors
  • Introduce the new hire to the whole company via Slack
  • Share manuals for, or provide training on, the tools important to their role
  • Share how to access the company wiki and technical documents
  • A team lunch with ice-breaking, or a team video call if remote
  • Share the schedule for the rest of the week, including regular team meetings
  • Things the engineering manager can ask the new hire to speed up relationship building
    • How do you do your best work? How can I help?
    • What kinds of tasks energize and excite you ?
    • How do you like to plan your day? Do you prefer meetings in the morning or the afternoon ?
    • How do you feel about giving and receiving feedback ?
    • How do you prefer to give or receive recognition ?

First week

  • In the first week, learn about the company, the product, and the customers
  • Introduce the company culture and history, including the founding story, values, vision, mission, and key milestones
  • Introduce the product. If you sell a SaaS product, create a test account for the new hire
  • Introduce the customers and how they use the product. Product recordings (screen recordings of real use) and customer interviews
  • Introduce the technical documentation
  • Introduce the new hire at the all-hands meeting
  • Schedule peer / mentor check-ins
  • Collect onboarding feedback to improve future onboarding programs. A survey is enough
  • Check in on the last day of the week : learn what went well and the areas that need help
  • Key points to cover in the first kickoff meeting with the new hire
    • Role clarity : review the things they'll be doing (resposiblities), review the JD, set expectations.
    • Development, compensation, and rewards : discuss the monetary/non-monetary incentives and career paths the company supports
    • Motivators at work : ask about the most enjoyable and energizing past projects. Use this to choose the types of work to assign and to identify the conditions that help them do their best work

First 30 days

  • The first month includes learning how things get done at the company
  • Coding standards, programming processes, workflow frameworks, how to set up the team's local development environment
  • Introduce the software development methodology
  • Share the team's repository documentation
  • Have the new hire start with small tasks such as common bug fixes or updates to older features. Through easy-to-start work, let them feel the accomplishment of making a meaningful contribution to the team.
  • Schedule peer/mentor check-ins and gradually reduce their frequency
  • Through weekly check-ins with the manager, make sure the new hire is getting all the support they need to deliver results
  • Pair programming sessions are a way to help the new hire easily get familiar with the entire codebase and the coding standards
  • At the end of the month, in an in-depth check-in, review successes and goals and identify areas that need support
  • Ask for more feedback on future onboarding programs

First 60 days

  • Over the next 30 days, the new hire will feel more comfortable with the work environment and the new teammates
  • The manager should consider assigning long-term Responibilities to the new hire
  • During check-ins, the manager keeps making sure the new hire gets all the information and support needed to do the job well

First 90 days

  • By the third month, the new hire can join discussions and do their work fairly comfortably
  • They can now work more independently
  • By the end of this month, the engineering manager should define more long-term goals with the new hire and follow up on them in regular 1:1 check-ins

Transition to long-term growth and management

  • What is often overlooked in onboarding is the transition to the long-term career development stage
  • Transition from onboarding to long-term development in regular 1:1 meetings
    • After the first 30 days, start thinking about ways to support their development over the next 3~6 months
    • Set clear goals and targets before the first performance review

Other onboarding considerations

  • Organized documentation that new hires can look up when needed is essential
    • An internal wiki is good to have
  • Technical documents new hires need
    • Guide to accessing the source code and the team's Git Repo
    • Dependencies between projects, including version numbers
    • API keys and Credentials for the tools used in the project
    • Sample data and input manuals
    • Design patterns and style guides
    • A test suite to verify that everything works
    • Deployment Credentials for staging / production servers
    • Release notes summarizing the product's shortcomings and what team members can learn from past mistakes
  • Project or feature documentation
    • The goals of this feature or project
    • How each feature should work compared with other features in the same SaaS product or ecosystem
    • Design guidelines, user flows, and coding standards
    • How the team works on a project or feature from start to finish. Each environment (development, staging, production) and who is responsible for deployment
    • Problems faced in this or similar projects in the past and how they were solved
    • What the current problems are and which solutions are being worked on

Tips for remote companies

  • Send the new hire a physical gift on their first day
  • Managers and team leads should make communication expectations clear from the start (e.g., that a daily standup can be skipped with a single Slack message)
  • Agree on what must not be missed, such as weekly check-ins and company-wide meetings
  • Choose the right tools and get company-wide buy-in (installing Slack may be pointless if people prefer email)
  • If possible, cover equipment/environment/internet costs for the best working environment
  • Help new hires and employees set boundaries (with flexible hours, different time zones, etc.)

Measuring onboarding success

  • Send at least one survey (HR experts recommend sending surveys at 7, 30, 60, and 90 days)
  • Questions to ask
    • I would recommend [our company] as a great place to work.
    • [Our company] motivates me to go further than when I held a similar role elsewhere.
    • I am confident using the systems and tools needed for my role.
    • I know well what I still need to learn to do my job well.
    • I understand how my role contributes to [our company]'s organizational goals.
    • So far, my role matches what was described in the JD.

Getting started with improving onboarding

  • Plan the schedule and goals : key milestones for the first day, first week, 30 days, 60 days, and 90 days
  • Have the HR team support managers and everyone involved : individual checklists, training for managers and team leads
  • Make documentation part of the daily workflow : build the habit of recording changes and updates (so new hires aren't given old, outdated documents)
  • Put yourself in the new hire's shoes

Result

"Anything you did to help a new hire, big or small, will be remembered for years"

The developer's curse: the endless sense of responsibility of those who can fix things

It starts with small automations

  • It starts with small productivity tasks such as a Python script to rename files or shortcuts for git commands
  • Once you fix a system's inconveniences yourself, everything in the world starts to look like something to improve
  • At some point it shifts from “I can” to a moral compulsion of “I must”

The weight of skill

  • Before programming, you could just shrug off clunky software, but now the problems are plainly visible
  • Sloppy code or hardcoded settings written by developers feel like an accusation
  • Your perception shifts so that every system and piece of software looks like a TODO list of things to fix

A life of endless refactoring

  • Every time, the thought “I could build this better” pulls you into developing your own tools
  • Messy code directories, countless attempts and abandonments, and endless redesigns can become self-imprisoning labor
  • As in Kafka's metaphor of “building a cage and waiting for a bird”, you can sink into building tools with no purpose

Software rots

  • Even a script that seemed perfect eventually becomes useless due to external changes
    • Website layout changes, package version changes, dependency errors, etc.
  • When something breaks, you feel guilt rather than mere inconvenience
  • In the end, you face the reality that ongoing maintenance is required

The illusion of automation

  • You often hold the false hope that “once it's set up, I'll never have to touch it again”
  • We think of programming as a victory in problem-solving, but it is just a war that never ends
  • There is no such thing as done; you are always just digging trenches that keep flooding

Coding as a means of emotional regulation

  • Building tools is sometimes a psychological response to controlling the chaos of life
  • The more complex the system, the more put-together you feel
  • To avoid a complicated life, you find self-comfort in trying new apps or refactoring

Burnout without warning

  • Burnout comes from an excessive sense of responsibility rather than simple overwork
  • Self-blame like “Why don't I fix what I'm able to fix?” adds to the stress
  • Endless technical responsibility acts as a self-destructive burden

Learning the skill of letting go

  • You don't have to solve every problem
  • Sometimes knowing that you don't have to fix it is the greater control
  • Accepting flaws and just using the thing can also be a conscious choice

The real skill is emotional clarity

  • The mental skill of not needing to fix things matters more than the skill to fix them
  • The ability to tell when to stop, and which projects are just for self-comfort
  • You need an attitude that breaks free from the compulsion to fix everything and finds comfort even in imperfection

Conclusion

결국 프로그래밍에서 가장 어려운 기술은,
"망가진 것을 그냥 두는 법" 을 배우는 일임

Design principles

Good codebases for learning software design

Wondering which publicly accessible codebases are considered the gold standard of software design

  • Large/flagship projects
    • Git, Postgres, CPython
    • The Linux Kernel's "lieutenants model"
    • UNIX v6, BSDs
  • Frameworks/libraries
    • Spring Framework
    • Laravel
    • Rust std library
    • Codemirror 6
  • Systems/servers
    • Postfix
    • Nginx
    • qmail
    • Varnish
  • Games/special cases
    • Doom 3
    • Bitsquid
  • Educational/learning material
    • xv6 (MIT OS course)
    • pytudes (Peter Norvig)
  • Other
    • Monocypher (cryptography library)
    • Tcl language implementation

LCW recommendations

Differences between structuring, abstraction, and algorithms

My answer:

  • Abstraction - defining concepts
  • Structuring - defining rules
  • Algorithm - defining procedures

Technical debt

See Technical debt.

Developer Survey

Correlated Technologies - How Technologies Are Connected (2018)

Correlated_Technologies_-How_Technologies_Are_Connected-_2018.png

Contests

See also

Favorite site

Beginner

Online compiler

Guide

  • Pitfalls developers should watch out for | GeekNews
    • Collects counterintuitive pitfalls developers often fall into and introduces the causes of easy-to-make bugs
    • Covers problems that frequently arise across many technologies, such as HTML, CSS, Unicode/text encoding, floating point, and time
    • Stresses that subtle differences in syntax and behavior across languages and frameworks can lead to misunderstandings or errors
    • Uses examples to explain pitfalls that can occur in real production environments in core backend areas such as concurrency, networking, and databases
    • Walks through problem situations, fixes, and improvements for unexpected behavior with many examples and reference links

Tutorials

News

Article

Libraries

  • [Recommended] Open source, experimental, and tiny tools roundup ~ (a collection of 500+ small tools for games/interactive websites; 32 tiny game engines, 11 indie/open-source game engines, 16 fantasy consoles, 16 Unity extensions, 16 map & level editors, pixel art / ASCII edit...)

Bloggers

Idea

References


  1. The_Languages_Frameworks_and_Tools_You_Should_Learn_in_2017.pdf ↩

  2. Curates well-known tech blogs - ㅤa site that shows them in a ranking scored by combining tweets/retweets/mentions/replies and comments on their recent posts ↩

author Zer0 sitemap