Programming
lastmod 2026-01-19created 2014-06-1554 edits
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
- The Ultimate Guide to Onboarding New Developers: Industry Best Practices and How to Plan the First 90 Days
- Developer onboarding guide: how to plan the first 90 days | GeekNews
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
- 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
- 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
- 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.
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
- Spring Framework
- Laravel
- Rust std library
- Codemirror 6
- Postfix
- Nginx
- qmail
- Varnish
- Doom 3
- Bitsquid
- xv6 (MIT OS course)
- pytudes (Peter Norvig)
- 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
- JetBrains - The State of Developer Ecosystem in 2017
- Stackoverflow - Developer Survey Results 2018
- JetBrains - The State of Developer Ecosystem 2020
Correlated Technologies - How Technologies Are Connected (2018)
Correlated_Technologies_-How_Technologies_Are_Connected-_2018.png
Contests
See also
- Programming language
- Recommended fonts for development
- Programming paradigms
- Massive open online course (MOOC)
- Bytecode
- Source code
- Code
- Serenade - A tool for coding by voice
- No-code development platform (No-code; Low-Code; NCDPs)
- Programmer (Korean: 프로그래머)
- Vibe coding
Favorite site
- Wikipedia (en) Description of computer programming
- Devpia (developer network providing development information on Visual Basic, FoxPro, SQL, ASP, Office, etc.)
- [Recommended] Koders Program Edition (open-source community, providing search and source code information)
- [Recommended] CodeProject (Share your code, libraries, tips and answers to help others and learn from the best. Just need code?)
- [Recommended] Codeguru.com (contains material on computer programming and programming language structures)
- [Recommended] Get A Code (sample code collection site)
- Learning programming online – the complete guide
- vsChart.com (a site that compares two or more products)
- [Recommended] Awesome lists about all kinds of interesting topics (a collection of sites, libraries, etc. on all kinds of interesting topics)
- [Recommended] Riju: fast online playground for every programming language (a very fast online playground; currently supports 224 languages and environments; Programming language; REPL)
Beginner
- Scratch - Imagine, Program, Share (Scratch)
- Anybody can learn - Code.org
- Github - EbookFoundation/free-programming-books - List of Free Learning Resources In Many Languages (a collection of free programming learning resources)
Online compiler
- coliru (C++)
- cplusplus.com: Forum: online compiler
- compileonline.com
- tutorialspoint.com
- ideone.com
- [Recommended] LeetGPU - Only platform to write and run CUDA code. Without a GPU. For Free. (a site for running CUDA code online for free)
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
- [Recommended] Tutorials for MFC, SAP HR, Yii, Clojure, Aurelia, CoffeeScript, CPanel, Laravel, SAP Webi, MS SQL Server, pinterest, Indian Polity, Teradata, Windows10
- CS146S: The Modern Software Developer (Korean) | GeekNews
- [Original] CS146S Korean Edition | The Modern Software Developer
- The official Korean version of Stanford's CS146S course
News
- The best open-source software of 2016 by category
- How it feels to actually learn JavaScript in 2016
- The future of the cloud
- How to write a killer resume (for software engineers)
- The languages and frameworks you should learn in 2016 (ko)
- The Languages, Frameworks and Tools You Should Learn in 2017
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
- [Highly recommended] Today's Best Developer Blogs on Any Tech Stack - Find the best developer blogs for a specific tech stack2
Idea
- I wish there was an app... - A site that searches for and shows only tweets in which people say "I wish there was an app~"