{"id":43,"date":"2016-02-27T06:38:09","date_gmt":"2016-02-27T06:38:09","guid":{"rendered":"http:\/\/lennycheng.com\/blog\/?p=43"},"modified":"2019-05-28T16:30:49","modified_gmt":"2019-05-28T20:30:49","slug":"thoughts-on-programming-and-life","status":"publish","type":"post","link":"http:\/\/lennycheng.com\/blog\/2016\/02\/27\/thoughts-on-programming-and-life\/","title":{"rendered":"Thoughts on Programming and Life"},"content":{"rendered":"<p class=\"font_8\"><span class=\"transparent\">Is programming fun?<\/span><\/p>\n<p class=\"font_8\"><span class=\"transparent\">I\u2019m going to exaggerate the next two statements:<\/span><\/p>\n<p class=\"font_8\"><em><span class=\"transparent\">Some view programming as a mystical skill, an esoteric form of knowledge understood only by creatures whose minds have already transcended the capacity of mere mortals\u2019. Like a samurai who deftly welds his sword to conquer the scariest demons, these creatures weld their knowledge of programming to solve some of the most enduring problems in human history, problems like instant communication, rapid transportation, and interplanetary travel. *<\/span><\/em><\/p>\n<p class=\"font_8\"><span class=\"transparent\">Meanwhile&#8230;<\/span><\/p>\n<p class=\"font_8\"><em><span class=\"transparent\">&nbsp;Some view programming as a pseudo-trivial skill, an obscure form of abnegation practiced only by creatures who prefer staring at computer screens than exploring the world. Like a donkey who makes semi-intelligent noises, these creatures speak in a blabbering and convoluted language, replacing \u201cMake the program faster\u201d with \u201cUse this lazy-loading singleton to manage a pool of worker threads and then implement a callback function to parse the contents in that ASCII table.\u201d &nbsp;**<\/span><\/em><\/p>\n<p class=\"font_8\"><span class=\"transparent\">*To be fair, hardware, marketing, business, and many other subjects contributed too. World-changing solutions are often not made in vertical silos.<\/span><\/p>\n<p class=\"font_8\"><span class=\"transparent\">**To be fair, these are different statements. The first is about what to do whereas the second is about how to do it.<\/span><\/p>\n<p style=\"text-align: center;\">________________________________<\/p>\n<p style=\"text-align: left;\">\n<div id=\"comp-iijmjkzw_SinglePostMediaTop_MediaPost__0_0_WholeSinglePost\" class=\"flex_display flex_vbox\" style=\"text-align: center;\" data-reactid=\".0.$SITE_ROOT.$desktop_siteRoot.$PAGES_CONTAINER.1.1.$SITE_PAGES.$mxsid.1.$comp-iijmjkzw.0.0.$child.$0.1.$1\">\n<div id=\"comp-iijmjkzw_SinglePostMediaTop_MediaPost__0_0__type_MediaPost\" class=\" flex_vbox\" data-reactid=\".0.$SITE_ROOT.$desktop_siteRoot.$PAGES_CONTAINER.1.1.$SITE_PAGES.$mxsid.1.$comp-iijmjkzw.0.0.$child.$0.1.$1.$5\">\n<div id=\"comp-iijmjkzw_SinglePostMediaTop_MediaPost__0_0_mediaText\" class=\"s8\" data-proxy-name=\"MediaLabel\" data-reactid=\".0.$SITE_ROOT.$desktop_siteRoot.$PAGES_CONTAINER.1.1.$SITE_PAGES.$mxsid.1.$comp-iijmjkzw.0.0.$child.$0.1.$1.$5.$0\" data-width=\"630\">\n<div id=\"comp-iijmjkzw_SinglePostMediaTop_MediaPost__0_0_mediaTextrichTextContainer\" class=\"s8_richTextContainer s8richTextContainer\" data-reactid=\".0.$SITE_ROOT.$desktop_siteRoot.$PAGES_CONTAINER.1.1.$SITE_PAGES.$mxsid.1.$comp-iijmjkzw.0.0.$child.$0.1.$1.$5.$0.0\">\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">I think programming can be both magical and boring.<\/span><\/p>\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">&nbsp;I am amazed that by hitting keys on a keyboard, we can make useful stuff that had never been made before. We can connect humans who live on different continents, initiate awareness and social change, and automate tasks that would otherwise have taken years to complete.<\/span><\/p>\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">&nbsp;Ideally in software, the sky is the lim \u2013 wait, spaceshuttles use software too, so instead let\u2019s say, \u201cIn software, the laws of physics are the limits\u201d (one can argue that the machine running the software is the limit) because software is a physical representation of our ideas and the individual steps for accomplishing a goal. Compared to other developments, software development is relatively young. But in a short 70-some years, it has become one of the building blocks of every developed country and is making impacts in emerging countries as well. Software extends our capacity to communicate not only to living organisms, but also to machines and artificial creations. By leveraging the power of machines, we can accomplish tasks that evolution had never prepared us for: we can leave this planet, explore the oceans, and even see virtual universes. Software is a tool for achieving more than what our biological selves can achieve on their own.<\/span><\/p>\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">&nbsp;I am also amazed that hitting keys on a keyboard can cause some of us to be so absorbed in painting individual brushstrokes as to forget the original picture we had set out to paint. Under the excuse of writing better code, we might neglect our health, let slide our dynamic dreams, and lose perspective on the trials and successes of our communities.<\/span><\/p>\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">&nbsp;Living a wonderful and meaningful life includes more than just communicating to machines: it is also about fulfilling our personal needs and desires. We want the liberty to pursue our dreams, to explore what exists beyond our personal worlds, to develop meaningful relationships with others, to be in good health, to laugh and have fun. Software developers are also living organisms who, like other humans, ought to enjoy life and not act like robots programed to make software. Although there are many subtleties to software development that require prolonged attention to understand, it is healthy to place software development into perspective.<\/span><\/p>\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">Software development is a huge topic that contains many subtopics and subtleties. Some of its subtopics include:<\/span><\/p>\n<ul>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">various types of development (web, embedded, systems, applications, defensive, network, etc, many of which work with each other)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">programming paradigms (the style we write code, eg, assembly, procedural, object-oriented, functional)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">development methods (how to split development into various stages, eg, Agile, XP to maximize productivity)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">relationship between code (yes, like humans, code is often interdependent and we seek to build robust relationships that don\u2019t need to constantly change when requirements change. Design patterns and refactoring techniques are helpful)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">problem solving (how to accomplish a task efficiently. To solve problems, one must first understands the relationship between codes and then think. Algorithms and data structures might be useful for hard-card problems)<\/span><\/li>\n<li style=\"text-align: left;\"><span class=\"transparent\">programming languages (there are dozens of major languages. Eg, C++, Java, SQL, JavaScript<br \/>\n<\/span><\/li>\n<\/ul>\n<p class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">Software development is not only about writing code but, like all team projects, is also about solving problems that affect other humans. As a result, software development links well with<\/span>:<\/p>\n<ul>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">business (if others are purchasing our software, it is important to understand how the business process works)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">communication (we want to inform our intended audience about what we\u2019ve built and why it\u2019s important as well as understand customers\u2019 needs)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">teamwork (since software is usually written by teams, we wish to maximize productivity)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">education (the software industry rapidly changes. Developers are usually learning new techniques and we seek to quickly learn and apply new knowledge)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">industry knowledge (if we\u2019re writing software for medical equipment, it makes sense that we have a basic understanding of what the equipment does)<\/span><\/li>\n<li class=\"font_8\" style=\"text-align: left;\"><span class=\"transparent\">creativity (there are many ways to write code. We also decide how to balance time complexities, space constraints, deadlines, various possible designs with and human factors)<\/span><\/li>\n<\/ul>\n<p style=\"text-align: left;\"><span class=\"transparent\">Writing software is more than simply staring at a screen and typing. It\u2019s an intellectually stimulating process that uses, at a minimum, logical reasoning, creativity, and thoughtful perspectives to solve meaningful problems. Software development combines with almost any discipline to efficiently complete tasks and by doing so, increases productivity. As long as we bear in mind the bigger picture of our software and why we\u2019re building it, I think developing software is a fun and meaningful practice\/hobby.<\/span><\/p>\n<\/div>\n<div id=\"comp-iijmjkzw_SinglePostMediaTop_MediaPost__0_0_mediaTextrichTextContainer\" class=\"s8_richTextContainer s8richTextContainer\" data-reactid=\".0.$SITE_ROOT.$desktop_siteRoot.$PAGES_CONTAINER.1.1.$SITE_PAGES.$mxsid.1.$comp-iijmjkzw.0.0.$child.$0.1.$1.$5.$0.0\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Is programming fun? I\u2019m going to exaggerate the next two statements: Some view programming as a mystical skill, an esoteric form of knowledge understood only by creatures whose minds have&#8230;<\/p>\n","protected":false},"author":1,"featured_media":44,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/posts\/43"}],"collection":[{"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":2,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":549,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/posts\/43\/revisions\/549"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/media\/44"}],"wp:attachment":[{"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lennycheng.com\/blog\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}