Posts in Programming

How To Boost Your Coding Skills

July 29, 2019 Posted by Programming 0 thoughts on “How To Boost Your Coding Skills”

In a bid to become a web developer, you’ve read a bunch of tutorials and gotten your feet wet with a couple of guided projects. You’re building solid front ends from the comfort of your terminal. Everything is going great, except that you feel like you’re hitting some kind of wall. You feel like someone pretending to program, that you’ve hardly scratched the surface. Impostor syndrome closes in around you.

Before you panic, know that the fear of not knowing what you don’t know is common. Hence the idiom, tip of the iceberg. What lays under the sea is unknown and can only be discovered by diving. We’ll walk through some of the tasks that can help you bolster your programming skills.

 

Don’t Build Safe Apps

Sometimes, as we begin our journey learning a new language, we fall prey to the familiar. We build the same TODO app three times because we’ve become comfortable with it. We continuously create variations of a basic CRUD app because we can recall the steps from memory and debug issues that arise. We don’t want to dive deeper and grapple with technologies we’d never used before. But diving deeper is the only way to improve. Although learning to code by building is the best way to learn, we still have to make sure that these projects continue to take us out of our comfort zone.

These projects should be somewhat ambitious. You can either start off with an idea, or you can make a list of the technologies you would like to improve on and make the app using them.

Some ideas can include:

  •  A talking JavaScript REPL for kids
  • A fake news identifier
  • A Netflix for books

Those are just a few ideas, but you can be as ambitious as you want. The idea is that you want to be able to learn through trial and error. Learning how to build a REPL may force you to go down the rabbit hole of compiler theory. Suddenly, you’ve gained a deeper understanding of programming languages, which helps to demystify compiler errors.

 

Go the extra mile and build for open source

Going into open source is the best way to experience the wild without the need to land a job. Once there, you will be exposed to how version control works in a team environment. This differs vastly from your personal version control where you wore all the hats. Now, you will be forced to learn how to write code that conforms to a certain guideline. You will also be acquainted with the file structure of packages and learn to skim through them to find the relevant folder.

For all of these reasons, getting into open source can appear daunting. Thankfully, you can ease into it by contributing to minor issues. These issues can be as small as a typo that needs fixing.

 

Dig into the meat of code

As you become accustomed to making small contributions to open source, there comes a time when you should decide to graduate and become a major contributor. To do that, you need to be able to read code. Reading code is one of the best ways to learn to code, especially if you have access to the author(s) of the code to ask them questions. By looking at their code, you can start to see how professional code is written and organized and then emulate that style. Eventually, you’ll be able to recall solutions that you’d seen in other code when you encounter a problem and be able to implement the solution. The reward of that feedback loop will only spur you on to read and understand other code bases. Ideas gleaned from them can be used to help build your own personal projects and will make you a more valuable contributor too open source. Once you’ve gotten to the point of consistent open source contribution, you will be a far cry away from the days of useless TODO apps.

 

 

Please follow and like us:
0

Coding Should Be Considered an Art Form

July 8, 2019 Posted by Programming 0 thoughts on “Coding Should Be Considered an Art Form”

Learning how to code is something that many start and few complete. Like many other activities, getting over the beginner hurdle can be difficult, especially when you don’t see much progress in the beginning. Specifically for programming, lack of early success may lead one to believe that a mathematical background is required before you can start developing anything. This form of impostor syndrome is detrimental to those who find their strength in the reading and writing portion of the liberal arts. There has to be a shift away from the idea that code is the sole domain of science. I remember one of my coding instructors surprising me by saying that he believed coding is an art. That statement jogged my mind. I’d always seen code as an austere beast, one incapable of expression. A means to an end.

However, code is much more than that; it’s a form of expression. All you need to do is look up Erick Steven Raymond’s hacker manifesto. In it, he refers to hackers(or coders) as part of a group of “creative people.” To hack, ideally, is to use a programming language to solve a problem. Of course, you can argue that this puts coding squarely into the domain of mathematics. Though that may be true, that doesn’t mean you can’t apply coding to another field. Skilled writers solve the problem of communicating ideas one sentence at a time. They refactor their words to heighten comprehension.  Mark Twain once said, “I didn’t have time to write a short letter, so I wrote a long one instead.” The quote exhibits a logical decision that the author made when setting out to write. The difficulty of writing concisely is similar to the problems that professional programmers face during crunch time. The elegant ideal that hackers seek to achieve must be compromised by deadlines that facilitate the need to write in-concise code.

Once you realize that code is expressive, you will start to see how semantic code can be. If you read different source code, you’ll notice different styles. Tech companies use style guides just as  online editorials use AP style guides to achieve a level of uniformity. Above all else, code must be legible so that others who stumble upon it can comprehend it. The emphasis is on writing code for humans and not for computers. Code isn’t the Matrix thanks to high level programming languages. JavaScript, Java, and Python are just a few examples of the many high level programming languages out there. They exist for a reason; they help us read and maintain code by pulling us away from the 1s and 0s of binary. Binary is how computers really communicate. What the high level languages allow us to do is communicate with computers with a translator(the compiler) there to tell the computer what we’ve written down. With that in mind, you can think of code as detailed grocery instructions.

So all the code you see out there in the wild are just that: instructions written in a foreign language. In order to be fluent in any language, it helps to read the language. So, reading well-written code is one of the best ways to learn how to program. As you read the code, you should ask yourself what purpose the line of code serves. In other words, what problem does it solve? Why was it written in this way? Could it have been written in any other way?

This sort of immersion is better than spending countless hours  slogging through a programming book or dabbling in brief tutorials. Languages aren’t learned passively. They’re learned by actually using them and discovering nuances and asking questions about those nuances. Just like you get better at writing by reading and writing, you get better at coding by reading and writing code. Though it’s true that coding involves problem solving, many of the problems you encounter can be solved by recognizing a few patterns and using trial and error. We solve many of our daily problems in this way.

If we want coding to become more of a mainstream phenomenon, the stigma of complexity must be removed. Rather, coding should become a basic skill taught in elementary and middle schools to develop intuitive problem solving skills. If we can think of coding as yet another art form, then perhaps the idea of a group of eight-year-olds coding on their free time may not be a pipe dream. The computer science stuff, like grammar, can come later.

 

Please follow and like us:
0

5 Interesting Applications of WebAssembly

July 3, 2019 Posted by Programming 0 thoughts on “5 Interesting Applications of WebAssembly”

 

Since the advent of web apps using technologies like AJAX, developers have been trying to bring desktop experiences to the browser. Google has been one of the most active in this area, creating Google Docs and its counterparts. Now that WebAssembly has arrived on the scene we’re seeing more companies trying to bring C++ to the web. Below are five applications of WebAssembly that present a sort of proof of concept for the viability of WebAssemby as a tool that will revolutionize the browser experience.

 

Google Earth

Jordan Mears, one of Google Earth’s engineers, once called Google Earth “a video game of the real world” in an interview. Coincidentally, as he later mentions in the same interview, Google Earth’s back end was first built using the same game engine that powered games like Crash Bandicoot. Of course, the application has grown a lot larger since its early days and is now available on various platforms. Now, the Google Earth team is working on porting Google Earth to Chromium-based browsers with WebAssembly. The preview is currently available. It remains to be seen how such a heavyweight application will perform on browsers that do not support WASM’s multi-threading feature.

 

Source Map

Thanks to the fact Tom Tromey and Nick Fitzgerald replaced most of JavaScript’s source map library into Rust code compiled to Web Assembly, source map parsing is 6 times faster than the previous implementation. Since source mapping is intrinsic to web development, their contribution demonstrates how WebAssembly can slash speed overheads. From a developer/maintainer standpoint, gone is the need to read clever wizardry that boosts performance. A lot of the critical source map code is written in legible Rust.

 

AutoCAD

What WebAssembly allows for is portability. Kean Walmsly announced a year ago that the AutoCAD software was finally going to be a cross-browser product. He explained how this works by saying, ‘A major part of AutoCAD’s C++ code base gets run through Emscripten (at least that’s my understanding – I’ll correct any details I get wrong) to be transpiled into WebAssembly.”

Since the desktop and browser version share the same code base, updates in the desktop can be easily shared with the browser version. The only drop off in the browser version is the lack of 3D models, one that Walmsly expects to be remedied soon.

 

Bar Code Scanner

When you think of Web Assembly, your mind doesn’t immediately travel to e-commerce; eBay’s engineers had the same issue until they realized that using an image processing feature requires heavy computation, a task that WebAssembly can gladly handle. This image processing feature comes in the form of a bar code scanner. The scanner, built using their proprietary C++ library, was performant when implemented in their app, but the web version was not nearly as successful. So, the team decided to port their C++ library to the web using WebAssembly. Their blog post is a great read. To sum it up, they wrangled with WebAssembly until they found a way to use three working threads to achieve near 100% accuracy with their bar code scanner.

 

Dropbox’s DivANS

Dropbox takes image processing on the web to another level with DivANS. The tool compresses files in the client so that the server doesn’t have to get involved in the time-consuming business of file compression. That’s not to mention the fact that the staged methods DivANS uses regardless of where it’s used already makes it a very efficient compression tool.

 

 

Please follow and like us:
0

Open Source Commitment Can Save Big Tech Companies

July 2, 2019 Posted by Programming 0 thoughts on “Open Source Commitment Can Save Big Tech Companies”

A few months ago, Elizabeth Warren proposed the dissolution of major tech companies like Microsoft, Facebook, Amazon, and Google. According to her, “[u]nwinding these mergers will promote healthy competition in the market — which will put pressure on big tech companies to be more responsive to user concerns, including about privacy.”

For many of the luminaries residing in Silicon Valley, the solution to combating Elizabeth Warren’s proposal may be to hope she doesn’t get elected or brace for a drawn out legal battle not unlike the one IBM fought in the 60’s and 70’s. If the latter option is chosen, the best bet for these big tech companies may be to show how their conglomeration of assets actually benefit the tech industry and the world at large. This goes beyond rehashing tired slogans; the proof invariably has to be displayed in 1s and 0s–in the tech world’s version of pro bono work, and that’s open source.

In a way, the natural progression of technological advancements like cloud computing have forced some companies–namely, Microsoft–to participate in open source. Still, one can hardly argue that a company like Microsoft, which once strongly opposed open source, has not befitted from finally taking the plunge. The benefit is not a monetary one, but one of good-will. This year alone, Microsoft has curried favor with devs by launching GitHub sponsors, a program that will allow users to donate money to their favorite contributors; and releasing open source tools that have been met with a warm reception, one such tool being a new Windows terminal. If you doubt that Microsoft is proud about their foray into open source, then you only have to look at the recent report by Jeff Wilcox, a software engineer at Microsoft. He mentions that approximately 25,000 Microsoft employees contribute to various open source projects, a 10x increase from 2015 when only 2,500 engineers worked on open source.

Microsoft’s example has also been taken up by Facebook, a company derided in the media, but one that has been beloved by a segment of developers due to notable open source contributions like React. We can go on and on about what company contributes to what tool, but the point is that many tech giants have given back to the community and have released APIs for other developers to tinker around with. Why is this significant? Contribution to open source slightly undermines the argument that tech giants are creating an unhealthy competitive environment. Conversely, their contributions may allow burgeoning startups to use cutting edge tools they would not otherwise have access to. One notable example of this is a tool that the NSA released called Ghidra. It’s an advanced reverse engineering tool that should cost thousands of dollars to use but was released to the public for free. The impact was immediate:

 

The NSA is not a company, but their payroll is bankable by tech giants who can use the talents of their employees to create various open source projects that cater to the needs of developers.

In the end, skyrocketing GitHub activities may not be enough to deter the government from breaking up these major tech companies. One cannot ignore the fact that vast sums of money pooled in a few hands can be used to buyout potential rivals or clone their business models in order to make them obsolete. These are the antitrust practices that have been the focus of Warren’s position against tech companies. One can argue that a greater pool of companies can allow for competition in the marketplace as well as in the open source space as companies vye for public approval. Or, perhaps, these new companies may be too consumed with gaining a percent in market share to dedicate time to making large open source contributions, shifting the burden on overworked hobbyists and contributors.

It may be that standing on the shoulders of giants isn’t altogether a terrible thing. For whatever faults these giants may have, we cannot fault them for the giant contributions they’ve left behind.

 

 

Please follow and like us:
0

Getting to the Meat of HTML

June 27, 2019 Posted by Programming 0 thoughts on “Getting to the Meat of HTML”

Pete Lambert, a UI engineer, recently published a well-written rant about the importance of semantic HTML. His post, titled, HTML is the Web brings HTML back into its proper perspective.  This made me start to wonder why HTML isn’t written with the same rigor as one would write JavaScript code.

There’s an obvious answer, of course. That is that poorly written JavaScript makes itself known to all involved in the form of jank and unreadability. On the other hand, markup is so forgiving that forgetting to close a tag won’t completely break everything; you don’t need to be a wizard to write functioning HTML. But that’s not enough to explain why markup is loosely implemented across a range of skill levels–from hobbyists to professional developers. Company style guides would include an indentation rule just to squash the single space vs. double space debate. Yet not a lot of thought seems to go into making sure crawlers can efficiently read markup. The problem may lie in HTML’s shallow learning curve. When you were first learning HTML, perhaps the only difficulty you might have faced was getting your Hello World to show up in a browser. From then on, you might have quickly experimented with a few tags, and then jumped straight into the cool parts of front end: CSS and JavaScript.

From then on, your experience with HTML may have been something you sort of learned by osmosis. Whenever you wanted to practise styling a button, you might have felt that a div appeared to give you a clean slate from which you could pour your CSS talents on to.  Actually, you might have begun to feel that divs rule HTML. If you needed a new element, slapping some divs down seemed to work alright. What really mattered, you felt, were the ids and classes. Rather than using semantic elements, you would let ids do the heavy lifting from a readability standpoint.

All of the above in some ways describes me; though, starting out I did invest in the Visual Quickstarter Guide for HTML5 and CSS(notice how HTML usually doesn’t stand alone).  I still remember being fascinated by how specific HTML can get in its layout. The book teaches readers what elements like article and section can be used for. Rather than using a boring div, use an article tag for content-rich pages. Use an aside for your sidebar rather than floating a div.

For some time after reading the book, I did write semantic HTML. However, once I fully dove into CSS, and then JavaScript years later, I began copying coding styles that I’d see on the internet; divs with a button class, divs with a sidebar class–divs everywhere; it was all about styling and scripting, anyway.

The prevalence of bad examples on the web reinforces bad habits. Some of us have never considered it necessary to dive into the deep end of HTML. We explore the hard parts of JavaScript and the hacky parts of CSS, but we manufacture HTML like it’s an afterthought. I’ll finish my point off with an anecdote.

I was working on front end UI with a friend who was just learning the front end. I quickly slapped together some markup for him to style; though, knowing that he was slightly new to HTML, I decided to do the responsible thing and write semantic HTML. When we met up on Google Hangouts to discuss the code, he acted as if I’d written Greek.

His confusion can be summed up in one question: “Why didn’t you use divs?”

That gave me the opportunity to explain that part of writing good HTML is writing semantic HTML and that writing semantic HTML not only makes it easier for us to read HTML, but it also makes it easy on web crawlers.

Of course, there are a bevy of other benefits that actual HTML experts can elaborate on. But you can see how it’s easy to feel that you know enough HTML to be dangerous. That thinking is what prevents one from getting to the meat of HTML. So, Lambert  concludes his post by outlining ways in which one can learn the nuances of HTML. The resources he listed are worth checking out.

 

Pankaj Patel

Please follow and like us:
0

BASIC is the First Programming Language to Receive a Historical Marker

June 18, 2019 Posted by Programming 0 thoughts on “BASIC is the First Programming Language to Receive a Historical Marker”

The BASIC programming language is often considered as the language of the 80’s. That’s because the idea of the personalized computer started gaining momentum during that era, introducing a wave of the uninitiated to the world of GOTO. We’ve already shared an article about how magazines used to post BASIC code for enthusiasts to translate into working code. To memorialize the language that taught thousands how to program, New Hampshire Department of Transportation installed the first ever highway marker commemorating a programming language.

However much a footnote this news appears to be, one cannot discount the monumental impact that Dartmouth Professors John Kemeny and Thomas Kurtz and a group of graduate students had on computer science. In 1963,  Kemeny and Kurtz not only developed BASIC to make programming more accessible to the average student, they also built a time sharing system that acted as a precursor to the internet.

credit: Dartmouth

The Dartmouth Time Sharing System(DTTS) was built by Kemeny, Kurtz, and graduate students to provide equal access to computing. Two of the key goals of the project was to make the time sharing system free and open-sourced. The program also came packaged with the first Integrated Development Environment(IDE). IDE commands had such a fast response time that many users believed that IDE commands were in fact BASIC commands and that the terminal was the actual computer. In that case, a brand new computer in the 80’s showcasing, 10 Print "Hello World!"20 Goto 10 would have in fact been displaying a terminal.

Where DTTS truly became the prototype of today’s internet was in the formation Kiewet Network. As DTTS spread across several high schools and colleges, users of DTTS were connected via teletypes, modems, and dial-up lines. Both Kemeny and Kurtz stressed the importance of extending beyond the technically-inclined. The idea was to remove the stigma that computers often garnered. BASIC and DTTS allowed 80% of Dartmouth students to become experienced in programming by 1968. That’s because using a computer was synonymous with knowing how to program. The fear that Kemeny and Kurtz really wanted to dispel was the fear of coding. There’s something to be learned about making programming accessible to non-technical students in our era of IT. Now that computers have been enhanced with GUI, there’s been a much less greater emphasis on teaching students how to use computers.

Unbeknownst to the creators of BASIC and DTTS, they had created the concept of personal computers. You can get a sense of this new phenomena in Kemeny’s brochure: “…any student may walk into the Kiewit Computation Center, sit down at a console, and use the time-sharing system. No one will ask if he is solving a serious research problem, doing his homework the easy way, playing a game of football, or writing a letter to his girlfriend.”

David Brooks, contributor to Concord Monitor, spearheaded efforts to have BASIC enshrined in a highway marker. He’d also attempted to get DTTS mentioned along with BASIC, saying, ” Our original idea was to mention both BASIC and the Dartmouth Time-Sharing System…[h]owever, the N.H. Division of Historical Resources, which has decades of experience creating these markers, said it would be too hard to cram both concepts into the limited verbiage of a sign.”

Though Edsger Djikstra may have had a few gripes with BASIC, he cannot deny that the language introduced a flood of people to a world that often seems alien to outsiders.

image credit: TheVerge
Please follow and like us:
0

JavaScript is the Most Used Programming Language, According to JetBrain Poll

June 14, 2019 Posted by Programming 0 thoughts on “JavaScript is the Most Used Programming Language, According to JetBrain Poll”

To kick off 2019, Jet Brains polled nearly 7,000 developers to determine “the state of the developer ecosystem.”  69% of those surveyed where fully employed while only 15% were students. To put the population into perspective, Stack Overflow’s 2019 survey had a population of 90,000 developers. The larger number allows for a much stronger representation of the developer community. You also have to take the Jet Brains community into consideration. Jet Brains’ most popular product is, arguably, Intellij IDEA, a Java integrated development environment. These variables have to be taken into account when reading the results of Jet Brain’s survey.

With that said, Jet Brains concluded that JavaScript is the most used programming language. HTML/CSS came second while SQL came third. This result came from a question that asked users what programming language they used in the last 12 months. Though the question is awkwardly phrased(it’s possible to use any language for 1 day in a 12 month period), it does show the prominence that front end development has in this current landscape. JavaScript use has become so ubiquitous that there are tools out there that allow you to transpile Java code into JavaScript, a fact that perhaps has led many a developer to rethink their life choices.

Let’s not ignore the fact that HTML is considered a programming language in this poll. Que the endless HTML is not a programming language memes. To be fair, HTML is paired with CSS which, with some(or a lot of) arm twisting, can be considered a programming language due to its turing completeness. Though, in the end it’s really just a style sheet language. Note that Stack Overflow is more careful about this by titling its section Programming, Scripting, and Markup Languages. 

According to the survey, Java is the most popular programming language out there. Here’s where Jet Brains population may have skewed the results. Some may argue that if Java was so popular, there wouldn’t be a need for both Scala and Kotlin.

The survey also found that two-thirds of developers practise pair programming. The problem with this finding in particular is that 1 in 14 developers that took the survey were in some sort of leadership position. A majority of them owned a small business. This is relevant because project leaders would like to assume that they are employing the latest agile methodologies.

Overall, the survey provided some interesting insights into the practices of a select group of developers, but the limited population restricts one from making sweeping generalizations.

Please follow and like us:
0

9 Linux Tools That Make Programming on Terminals Easier

June 13, 2019 Posted by Programming 0 thoughts on “9 Linux Tools That Make Programming on Terminals Easier”

 

The Unix philosophy embodies a system of modularity, which allows for a seemingly limitless opportunity for extending various Unix systems. Many tools arise to help programming on Unix systems more bearable when interfacing with a terminal, one of the most important tools for interfacing with a Unix system. Below are tools that make programming on terminals more bearable.

 

Zsh/ Oh My Zsh

Zsh is the de facto terminal for Unix users. The Unix shell is excellent because of its command line completion, which allows you to write more scripts with fewer keyboard inputs. The community has also created extensions like Oh My Zsh, which make the Zsh easier to install and use for newcomers.

lsd

Are you tired of looking at bland ls outputs? lsd, not to be confused with the drug, adds color to output. Colors correspond to different sections of ls output like directories and executable files. The contributors claim that lsd is faster than colorls due to the fact that lsd is built with Rust as opposed to Ruby. At the moment, there are no options to customize the default colors.

fzf

Fzf is a general purpose fuzzy finder that can filter files, command history, processes, hostnames, bookmarks, commits, and anything else that is structured in a list. The fuzzy finder boasts super fast search speeds.

kitty

Kitty is a terminal emulator that leverages your system’s GPU to improve speed. The emulator is built from the ground up to support modern terminal features like images, unicode, ligatures, tiling and much more.

bat

Bat is a clever renaming of cat, coming packaged with the normal concatenation and printing functions. In addition, Bat adds some nifty features, like text highlighting, git integration, and pagination.

tmux

Tmux, like kitty, is a terminal multiplexer that allows you to access multiple terminals on a single screen. This allows you to keep track of multiple programs at once.

 jq

jq is a command line JSON processor. The program is a filter that can produce various results. You can use different filters to perform specific tasks and chain these pipes together without the need for loops. jq is written in portable C and comes with no dependencies.

exa

exa attempts to be a modern replacement for the age old ls command. Data is highlighted and file information is extended for easier browsing.

Meld

Meld is a visual diff and merge tool that allows you to compare changes in order to avoid merge conflicts. Meld is compatible with a multitude of version control.

 

Please follow and like us:
0

8 Websites That Will Make You a Better Problem Solver

June 4, 2019 Posted by Programming 0 thoughts on “8 Websites That Will Make You a Better Problem Solver”

One of the most stressful aspects of looking for a developer job is prepping for technical interviews. Often it’s the problem solving questions that keep candidates up late at night. These problems aren’t geared towards your knowledge of a particular language–the recruiter would expect you to  already have a certain level of expertise in a language. Rather, the technical interview tests your problem solving process. How do you think about a problem? Do you communicate effectively, or do you simply internalize a problem?

Though you generally don’t need to have a strong mathematics background to succeed in coding challenges, it helps to know the basics. For example, it would be helpful to know what prime numbers are if you’re asked to list a series of prime numbers in a challenge. Math.com is a great review site that presents a simplified overview of concepts.

Below, we’ve listed sites that provide challenges that will help you sharpen your problem solving skills. But to build good habits, you should practice communicating your thoughts out loud, as if someone were in the room with you.

 

Project Euler

If you’re not looking for the bells and whistles of community based code challenge sites, then Project Euler is the best website to find a range of challenges. There are 663 problems on the site for you to bang your brain against. Many of these problems are fair game in a technical interview.

 

Kattis

Kattis positions itself as a platform for companies, schools, and problem solvers. Problem-solvers specifically get to select from a list of alphabetically ordered problems. The website also offers a leaderboard of its top 100 users. Like many other code competition sites, the top coders can then attract employers.

 

Codility for Programmers

Codility for Programmers is an extension to the technical recruitment platform. The real value of this website is their lesson plan, which walks you through challenges based on topics like sorting, time complexity, and search algorithms.  Every once in a while, Codility also offers challenges that can earn you a “Codility award.” The submissions are tested for correctness and performance. Awards of silver and gold are given to the runner up and top solution respectively.

 

Hacker Rank

Hacker Rank is the grand daddy of code challenge websites. If you have the misfortune of stumbling upon the website’s front page, it can be hard to notice that fact due to the way it markets itself as a job matching site. If you make your way to Hacker Rank’s dashboard, however, you’ll find a trove of tutorials that focus on algorithms, data structures, and mathematics. Due to the sites popularity, gaining recognition on the site by participating in competitions can also get you noticed by employers.

 

Tech Gig

Tech Gig is structured like most other code challenge websites. Though, the barrier to entry for Tech Gig is much more apparent. Hacker Rank requires a login to access challenges and practice problems, but Tech Gig requires a log in from the get-go. The only options for registration are professional and student–and nothing in between. Otherwise, the website offers a nice self evaluation mode that can help inform you about the skills you need to improve upon.

 

Code Chef

Code Chef is an excellent site for competition due, in large part, to their community. There are usually a few contests to whet your problem-solving appetite and these contests can be hosted by anyone in the Code Chef community. What’s also great is the Stack Overflow-esque question board that sits on the home page, reminding you of the help that the community is willing to offer to its struggling members. There’s also a practice section that groups problems into beginner, easy, medium, and hard.

 

Leet Code

What makes this website stand out from the rest is that the community offers real world interview questions for you to sink your teeth into. These questions are divided into system design, object-oriented design, operating systems, algorithms, databases, and shell. The practice challenges can be accessed immediately without the need to log in. You can get right to solving challenges that range from easy to hard. Another nice bonus is the built in editor that allows you to do everything in the browser. It must be noted that certain challenges require a premium account to access them, but those premium challenges are few in number.

 

Code Wars

Of all the problem-solving/challenge sites listed here, Code Wars has the biggest barrier to entry; you have to prove that you know the rudiments of your language of choice before you can proceed. However, the challenge is incredibly easy and functions as more of an inside joke. Once you sign up, you have the option of choosing a skill level ranging from learner to senior developer. There are a bevy of “katas” or challenges to choose from. Challenges are devised by the community. Code Wars provides arguably the best problem solving platform. You have a customizable editor along with pre-written tests that help you get into a real world problem-solving mindset.

 

Please follow and like us:
0

What it Means to Code

June 3, 2019 Posted by Programming 0 thoughts on “What it Means to Code”

Coding is often a word that’s thrown around to describe the process of building software, as if the act of typing out characters is what truly makes an app come to life. But coding really isn’t about computers, it’s mostly about people. In terms of the concept of coding(sitting at a desk with your eyes glued to code), we can roughly say that a quarter of coding consists of writing actual lines of code. A blogger conducted an informal study of her internal network among 65 developers and found that they roughly spent 25% of their day actually coding. That percentage may fluctuate day to day, of course, depending on circumstances; e.g. a game developer hitting crunch time.  Still, on average, most of a programmer’s time is spent debugging their own code and the code of other humans, maintaining and rereading code that other humans wrote, and meeting with other humans to talk about building stuff that other humans would enjoy using. And then you have your co-workers that you have to deal with. They have egos, flaws, different perspectives.

You also have coding paradigms and philosophies, which are very human in nature. A developer who has clout within a company can throw his weight around to enforce a particular technology stack that will effect the way you code. The company itself may strongly adopt a functional paradigm which eschews the notion of state-changing behemoths. The computer hardly cares about your company’s decision to use a particular paradigm, but we humans care. We care to such an extent that we’ve created Agile, Lean, DevOps–just to name a few methodologies. All of them influence the way you engage with your code by dictating time spent collaborating with other team members.

Programming languages also embody a certain mindset that centers around how people like to do things. For example, the Ruby philosophy is all about having a variety of ways to solve a single problem. There’s a wild, fast nature to the Ruby on Rails environment that made it popular with boot camp students and startups. On the other hand, Python has a more measured philosophy that tries to enforce “one way to code.” So, it’s not surprising that scientists have created a community around Python. Theoretically, Ruby can easily be used for data science. But since coding is about people and the communities that they form around languages, Python has the tooling that makes it the de facto language for data science.

The problem comes when we forget that coding is not all about computers. That’s what leads to the one line wizardry that looks clever, but takes a page of documentation to explain how the code actually works. It would be nice if the computer could reply back and explain the code to us in plain English. Unfortunately, that’s not the case. A human understanding of code dictates that code should be written for the next person that will either have to review or maintain it. That means providing thorough documentation.

Some people take that to mean every line of code must be accompanied by a paragraph of explanation. Many humans also don’t like reading technical jargon. If every line of code needs explanation, that calls for some refactoring. Crafting elegant solutions should not only be synonymous with the optimal O(logn), but should also be synonymous with high readability.

The human-nature of code extends beyond coders to the people who benefit from the code. Facebook uses algorithms that can suggest articles in your news feed based on  your interests. You can find the nearest fast food restaurant or just stay at home and order some grub. Everyday people use “algorithms” to explain Youtube videos popping in and out of their feeds or Google ads tailoring ads based on the back scratcher he/she bought the other day off Amazon. Code has entered into our dialogue-literally; audio processors have allowed the likes of Alexa and Google Home to become a part of our existence.

Robert C. Martin, author of The Clean Code Blog, details the responsibility programmers now have towards their fellow humans:

It is well past the time that we programmers can safely isolate ourselves from the rest of the world. We programmers must no longer hide in our little techie bubbles. The code we programmers write matters. It matters to the hopes and dreams of our society and of our civilization. It matters to people walking their bicycles across the street. It matters to anyone and everyone because the code we programmers write lubricates, enables, enhances, and simplifies virtually every aspect of daily life. From something as small as a young mother checking her baby monitor, to something as large as international nuclear-weapons policy, and interplanetary travel, our code matters.

Since we code for people, we have to write safe code. Defensive programming ensures that the code you write has minimal bugs. That often means writing clean code so that the bugs themselves can be more easily traced. The code should be nearly fool-poof against extreme cases and weird input.

So, all that said, what does it mean to code? Well, in 2019 coding is about writing for your fellow developers and your customers.

 

 

Please follow and like us:
0