Abstract
Computer programming is one of the main skills that students gain when they graduate from computer science programs. However, students often have significant difficulties with their programming skills. This paper is based on a survey study that summarizes the primary reasons for students difficulties in this area. In addition, methodologies, such as seeing the software big picture and pair programming, are suggested by which students can improve their programming skills. These methods are adapted from software engineering subdisciplines.Computer Programming:
Programming code is human-written instructions for computers.
Programming is a creative process that instructs a computer on how to
do a task. Hollywood has helped instill an image of programmers as uber
techies who can sit down at a computer and break any password in
seconds. The reality is far less interesting.
So Programming Is Boring?
Computers do what they are told, and their instructions come in the
form of programs written by humans. Many knowledgeable computer
programmers write source code that can be read by humans but not by
computers. In many cases, that source code is compiled to translate the
source code into machine code, which can be read by computers but not by
humans. These compiled computer programming languages include:
- Visual Basic
- Delphi
- C
- C++
- C#
- Cobol
- Fortran
- Objective-C
- Swift
- Pascal
- Python
Some programming does not need to be compiled separately. Rather, it
is composed of a just-in-time process on the computer for which it is
running. These programs are called interpreted programs. Popular
interpreted computer programming languages include:
- Javascript
- Perl
- PHP
- Postscript
- Python
- Ruby
Programming languages each require knowledge of their rules and
vocabulary. Learning a new programming language is similar to learning a
new spoken language.
What Do Programs Do?
Fundamentally programs manipulate numbers and text. These are the
building blocks of all programs. Programming languages let you use them
in different ways by using numbers and text and storing data on disk for
later retrieval.
These
numbers and text are called variables and they can be handled singly or
in structured collections. In C++, a variable can be used to count
numbers. A struct variable in code can hold payroll details for an
employee such as:
- Name
- Salary
- Company Id Number
- Total Tax Paid
- SSN
A database can hold millions of these records and fetch them rapidly.
Programs Are Written for Operating Systems
Each computer has an operating system, which is itself a program. The
programs that run on that computer must be compatible with its
operating system. Popular operating systems include:
- Windows
- Linux
- MacOS
- Unix
- Android
Before Java, programs had to be customized for each operating system.
A program that ran on a Linux computer could not run on a Windows
computer or a Mac. With Java, it is possible to write a program once and
then run it everywhere as it is compiled to a common code called byte code, which is then interpreted. Each operating system has a Java interpreter written for it and knows how to interpret byte code.
Much computer programming occurs to update existing applications and
operating systems. Programs use features provided by the operating
system and when those change, the programs must change.
Sharing Programming Code
Many programmers write software as a creative outlet. The web is full of webpage and source code
developed by amateur programmers who do it for fun and are happy to
share their code. Linux started this way when Linus Torvalds shared code
he had written.
The intellectual effort in writing a medium-sized program is comparable to writing a book, except you never need to debug a book. Computer programmers find joy in discovering new ways to make something happen or in solving a particularly thorny problem.
10 Skills Necessary for Coding
At its heart, coding is expression and problem solving. You can focus on its applications, on programming languages, but no matter how you practice it, you’ll cultivate these two essential skills, which will help you in all aspects of life. Besides existential value, learning to code proficiently will offer you myriad job opportunities, the ability to create your own schedule/work from anywhere, high wages for less hours of labor, eager to please clients that need/search for your help, and much more.Coders have more time to work on their passions, side projects, and enjoy a sense of self-reliance most workers don’t. They spend their time making websites, applications, and systems work, while building real solutions, and improving experiences for end users and employers alike. Coders have enhanced focus, because the issues they tackle require sustained, concentrated effort. This leads to greater productivity in all sectors of life. One of the greatest benefits from coding is consistently entering a state of flow, in which time, distraction and frustration melts away, allowing the coder to form a union with the task at hand. For all these reasons, coding casually or professionally can improve your life. So how to begin? Here we’ll examine ten skills that every coder needs.
1) Self-Reliance
This one is huge. When you start out coding, it can feel completely overwhelming. Should you focus on front end or back end? What programming languages should you use? Where to begin? Keeping in mind that the only way to eat an elephant is a bite at a time, pick something and start. There are infinite resources where you can learn to code, but it’s up to you to seek them out, and engage with them. There will be times where you want to give up, or have someone else show you how to do something, but the more you resist those urges and try and fail on your own, the greater your longterm success. To have any success in coding, you’ll have to master impatience, frustration, distraction and the dependence on external forces to solve technical problems (something we’re all increasingly reliant on). In order to combat these obstacles, there are several things you can do. The first is accepting responsibility.
You have the greatest influence on where you are, what you know, your capabilities, and how to change all of them. It’s never too late to recognize this and change your approach and efforts. Once you’ve taken responsibility, the information you consume and how you apply it, (your interest, study and effort) will dictate your ability to transcend your limitations (in this case, not being able to code vs. learning how to). It’s important to have a goal in mind. Why do you want to code? What problem do you want to solve, or what project are you hoping to manifest? Knowing the answers to these questions will help you narrow down where to focus your efforts, what languages to learn, etc.
Finally, self-reliance boils down to the choices you make. You can’t just put in work blindly. The same way you need to have goals the work is aimed towards, you need to choose a path that will bring you towards them, independent of what others have done, or leaving it up to chance.
2) Language

It may seem obvious, but in order to write code, you’ll have to learn at least one programming or scripting language. Some resources for beginners include the completely free Code Activity, which has helped 24 million people begin their coding experience, edX, founded by Harvard and MIT, which offers 60 schools and GitHubs, which gives you access to 500 free programming books that cover 80 different languages. Experts suggest trying to become proficient in one language rather than trying to learn very little of a few, the same way you would take French, Italian or Spanish rather than all three at once. So which language to begin with? That has a lot to do with what you’re trying to accomplish, but there are three that stand out for their multi-faceted applications, consistent utility and accessibility to beginners. These three are Python, Ruby and JavaScript.
Python, developed in the 80’s, is considered one of the easiest coding languages to learn. It’s free, open source, and most often classified as a scripting language (meaning it doesn’t require an explicit compilation step). It’s one of the most ubiquitous programming languages today, and used by the likes of Google, Yahoo! and NASA. Ruby is a similar beginner-accessible, extremely prevalent scripting language. It’s dynamic, object-oriented scripting language used to develop websites and mobile apps. Ruby was designed by Yukihiro Matsumoto to be easy, logical, and not require advanced knowledge of commands. Ruby on Rails, helped expand its usefulness for the web, and is used to make the framework for Twitter, Groupon and GitHub. It’s also often used for backend development. JavaScript (not Java) is most often used as aclient-side scripting language for front-end development. It’s the most frequently used programming language to make websites and games for Internet use, much of its syntax comes from the programming C Language. JavaScript is universal, running on all platforms and is in your browser (no installation required). Anything you want to build on the web will require some knowledge of JavaScript.
3) Logic

Were you a master of Geometry in high school? Love proofs? Live to assess the facts at hand and come to useful conclusions for problem solving? You may have a skeleton in one of the most important skills for coders. There’s a reason so many people that study math and physics end up as coders. Figuring out what mistake/bug/bad line of code led to an issue in a project is partially intuitive, but often an exercise in logic. So how do you build up your logic skills? Treat them like muscles, and exercise them. There are tools like Decoder which gives you challenges/problems that will develop your reasoning. Another way to build logic skills is through conditional thinking, which essentially means, if this, then that. For example, let’s say if you climb more than halfway up the mountain, you’ll get a nose bleed. If you stay below the halfway point, you won’t. In programming, this style of thinking is used to test variables against values, and order action based on what conditions are met. It can be understood like this:
if (a condition evaluates to True):
then do these things only for ‘True’
else:
otherwise do these things only for ‘False’.
Simple mechanisms can’t do this. It’s these conditional statements that let the program take on an analytical life of its own and not just follow one set of instructions to its end. It’s important to use conditional thinking or statements to your benefit, but not live or die by them. They’re a tool to help expand the abilities of what you’re creating, but shouldn’t box you in in your ability to troubleshoot. Take the previous example. It’s important to realize just because someone’s nose is bleeding, doesn’t mean they went halfway up the mountain. Nose bleeds happen for all kinds of reasons. Removing yourself, and your subjective experiences from the situation at hand will be helpful. What you’ve encountered, or think you know, should be used as a suggestion, but not an end all. Be open to being proven wrong. Observe any problem or task as it is, and let that dictate how you approach it, doing so so from a what, how and then why progression.
4) Attention to Detail

Many programmers and coders don’t go to school to learn their trade. There are different ways to measure aptitude for coding, but nothing can substitute the effort a person makes, on their own. It’s one of the few areas in the world where self-taught hard work can lead to a lucrative, highly demanded career. What you won’t NEED to have learned, or have prerequisite abilities, will be mitigated by how closely you can pay attention to details. The understand of the interconnectivity in commands, general awareness and lingual precision are all extremely important parts of a coder’s toolkit. One way to do this is through organization.
Instead of hammering yourself each time you overlook an important detail, build a game plan from which you can assess, review and improve your work. Maybe taking laps through the code you write, or promising to reread pertinent information at different times of the day, while working intermittently. Whatever works for you, just make sure you have a system beyond, “I will pay attention to the small stuff.” Scheduling your time leads to more productive, efficient work.
Improving your attention to detail has a lot to do with knowing what to look for. Towards that end, make lists. When you learn something that you know will be useful again and again, write it down.
When you have work, research, new skills or languages to do or learn, list what you’re hoping to accomplish, and how you do it. When you achieve something on the list, put a check mark next to it (don’t cross it off, you may need to come back to it). Another way to improve your prescience is maintaining a schedule. You may not going to be as sharp after big meals, or first thing in the morning. You’ll figure out best when you’re most on point, but take note of it, and do your programming or coding work when you’re on top of your game. Another time-honored way to improve focus is meditation. Even focusing on your breath for 10-20 minutes a day will pay dividends in the rest of your life. Another surprising way to improve concentration? Exercise. At least 30 minutes a day leads to a marked improvement in focus. Most importantly, be gentle with yourself. Develop a sense of when to push through despite wanting to break, but also make sure to give yourself brief breaks when you’re feeling unmotivated or having trouble paying attention to details. Then when you come back you’ll be fresher and get better use of your effort.
5) Recognition of Stupidity

This could also be “understanding how computers think.” We’ve all been told not to make assumptions, but assuming common sense on behalf of a computer while programming or coding is a recipe for disaster. Computers are dumb, and ruthless. Their strength is their processing power, not independent or creative thought. They’ll do exactly what they’re told to, even when it might seem obvious to gently tweak instructions, or not follow the same ones again and again. People like Bill Gates and Stephen Hawking have warned about artificial intelligence leading to the apocalypse.
Nick Bostrom, a student of super intelligence and the director of the Future of Humanity Institute at Oxford University, laid out how the world could be destroyed by artificial intelligence under instructions to maximize the number of paper clips in the world. If that AI was able to invent technology and build manufacturing plants…look out. “How could an AI make sure that there would be as many paper clips as possible?” asked Bostrom. “One thing it would do is make sure that humans didn’t switch it off, because then there would be fewer paper clips. So it might get rid of humans right away, because they could pose a threat. Also, you would want as many resources as possible, because they could be used to make paper clips. Like, for example, the atoms in human bodies.” So when you’re coding, make sure what you’re inputting is what you expect to be output, no more, no less. The program can’t make adjustments or improvements that it’s not told to do first.
Some of the greatest achievements in programming have been creating algorithms that get computers to think in more independent, brilliant and productive ways. Look into algorithms like Quicksort, Huffman Compression, the Fast Fourier Transform, and the Monte Carlo method to see what I mean. All of these have helped develop a major goal for coders: getting computers to do more of the heavy lifting through artificial intelligence, yet doing so in a way that is useful, focused and doesn’t lead to our species’ destruction. So when you’re coding, try to think the way a computer does, and use your attention to detail skills to make sure you specify exactly what you want, without leaving anything to chance or adaptation. You won’t have to specify EVERYTHING, some calculations will be made automatically to free you up to directing the program. But maintaining a mind frame where you don’t trust what you’re working on to do anything it wasn’t explicitly told to is extremely important.
6) Abstract Thinking

Let’s say for example that you told someone to go buy a pizza. That would work out great if the person automatically knows how to get to the pizza store, what money to bring, the pizza you’d like ordered, and even smaller, more minute calculations like how to drive, walk, or continue breathing. You might even bring back a pizza that I wouldn’t think I’d enjoy. But perhaps after eating it, I learn to love it. An abstract thinker could recognize something in my newfound reaction to a previously undesired pizza that speaks to the ability to change our feelings and desires even when we don’t think we will or want to. Being able to separate, create and visualize what a program knows, what it can know, what it’s compartmentalized already and how these factors interact are all essential to coding.
7) Patience

On horribly hot days, you have the choice to rebel against the heat, huffing, puffing, and letting agitation overheat you even further. Or you can give in to it. Accept that you’re cooking in the sun, picture yourself melting into the pavement, erasing separation from the heat in your mind. Coding is extremely difficult. Nothing that you’ve read here, or read somewhere else should be interpreted differently. At all stages, but especially when beginning, you should expect to feel extreme frustration. However, your ability to withstand that frustration, and move through it, without letting it discourage you will serve you in all that you do. Look at your frustration as a tool to develop your patience. When you’re coding, you’ll likely go through this experience: you write something. You’re extremely confident in it. You double and triple check it, and it still doesn’t work. You have no idea why it doesn’t work, what you did wrong, how to fix it, etc. It can be a crushing weight. You can feel useless, or like you’ll never be successful, not just at this project, but in life. Take comfort in the fact that countless people have felt this way before you. How you deal with this feeling is all that matters.
If you believe in your ability to overcome, find a new route, or even start from scratch and improve, you can and will (or at least you’ll have a way better shot than those that give up completely).
Paying attention to details goes hand in hand with taking time to let their meaning develop. “Details matter,” Steve Jobs said. “It’s worth waiting to get it right.” Recognize that when you’re struggling, what you’re dealing with is uncomfortable, but not intolerable. Repeating that to yourself until it becomes ingrained will be very helpful. Let the pain you feel from frustration push you to find solutions. Solutions rarely come from desperation, or the quickest, wildest approach. A big part of patience is talking to yourself. When you hear the voice of, “you’ll never do this, this is impossible, just give up,” be ready to counter it with a more determined, softer, kinder voice that represents your deeper, persevering core. One of the best ways to build patience is through reading, or really any sustained activity that requires focus. The longer you can do one thing, despite the temptation to quit, or go do another, the better your ability to overcome the frustration of coding will be.
8) Strong Memory

Innovation and improvisation are extremely important to coding. In many cases you’ll find yourself completely baffled, or faced with a problem, project or situation you think you know nothing about. Sometimes you’ll be right. Often, if you think hard enough through your experiences, you’ll realize something you’ve already encountered may prove useful again. It might be from direct coding experience, or it might be an abstract, unrelated memory that somehow seems pertinent, or just through recalling it makes you think of something useful for the moment at hand. While working with the same languages, you’ll internalize syntax, and it will feel less like using memory and more second nature to recall important commands.
When it comes to long term memory, you’ll be aided by infinite manuals, websites and tools that will help you recall important information. As you develop your abilities (and want to complete projects faster), memorizing more information will be useful, but it’s not something to worry about immediately. However, when it comes to short term memory, you’ll want to do whatever you can to cultivate and improve your natural faculties. Coders need to be aware of many different pieces of information at once, and know how they’ll all react to each other. Being aware and able to visualize design, data flow, algorithms, data structures, and how they effect each other will separate you from the average coder. At first it can feel like juggling herring with ravenous dolphins jumping all around you, but it gets easier. This is where memory and flow coincide. The more you can lose yourself in the project, the less it will seem like a struggle to remember different aspects of the work. Meditation techniques and memory exercises can help with this as well.
9) Scientific Method

The problems/challenges of coding can seem infinite, daunting, and impossible to begin. That’s where using the scientific method to break down obstacles and projects themselves can become extremely helpful. In most jobs, you develop and learn many ways to solve problems in the first year or so, then apply them from there on, occasionally developing new solutions as well. But in programming, a good deal of your time will be spent developing solutions to problems that have never been solved (at least not in the exact way you’re encountering them). You won’t have information on how to go about solving them, you’ll have to use trial and error. Seeing coding as research or experimentation will be extremely useful. It’ll also aid you in terms of deadlines. Because you’re doing something new, you can honestly expect leeway because it’s unclear how long it will take to properly solve a problem. Following these steps will help you with whatever project you’re working on.
Start with a hypothesis. What do you think the program you’re writing will accomplish? Or, what do you think a program look like that could solve a particular problem? Next, you outline how you will write the code, either on paper or in your head. Then you take a crack at it, and see what you came up with. That’s followed by comparing what you created, and the control, or what the program was supposed to do. It’s also aided by showing the program to others and getting their input on what you’ve done. Does the program you created match what you expected? Does it serve the function it’s supposed to? Finally, you begin debugging, or bringing the program closer to the ideal you’d imagined.
10) Communication and Empathy

Perhaps the most overlooked aspect of programming has little to do with the manual and mental labor of writing code. Coding is an insular world that effects our lives more each day. Coders need to be able to work with, and explain what they do to employers, clients, consumers and coworkers that don’t understand what they do. Writing clean, effective code is great, but when you pair it with strong empathy and communication skills for beginning coders, end users, you become the rising cream.
Anyone can say, “this is how we’re doing it,” or, “you just don’t understand.” Elite coders listen to feedback and adjust, even if those providing it don’t understand the ramifications of their words. An effective coder can manage expectations, interpret vague desires and honestly assess and communicate what is, and isn’t possible. Coders are known for their egos, but those willing to patiently give and accept advice and direction are far more respected than snarling programmers that only relate to their desktops.
Empathy is the art of comprehension, awareness, sensitivity and sharing of other people’s emotions. When coupled with the ability to express and prioritize others’ priorities and feelings, it’s extremely potent. Communication and empathy breeds positive, actionable accountability, and will make your job far easier in the long run. You’ll better understand others’ needs, feelings, and how your behavior and work are received and interpreted. And irregardless of coding, or work life, better communication and empathy will make you happier, more convincing and more durable to the negativity of others and hardships of life. These are skills that require proactive, consistent development, with the same level of focus and commitment you’d apply to learning a language or working on an important project.
How do I improve coding skills as a computer science student?
- First learn to analyze the programs. Execute the programs which are given in your book. Try to understand why the following ouput is shown.
- To understand better, you can try to solve more and more questions related to patterns. This will increase your understanding in Loops. And you'll get an overall view that how things happen.
- Be more curious. Don't go in a traditional way. Make changes in every program to see how things change when you use a different method or procedure.
- More over, have a good knowledge about the theoretical concepts. This will help you to improve your skills in coding.
What are some habits that will help you improve as programmer?
- Most problems are simply a matter of an unasked question, but when someone advises you to “always ask questions” it’s not great advice. Develop the skill of cataloging and prioritizing your questions.
- Always challenge yourself but never be afraid to discard a challenge. Great engineers can be undone by the inability to recognize the right solution to the wrong problem .
- Play. Programming will always be an electronic version of lego or mechano, using pre-existing blocks to form something unique, take the time to experiment and try things. Implement something you use routinely and take for granted - whether that’s a hash map or a linked list or a web server. Find a bizarre use for an algorithm you like. Write some code you enjoy working on, binge-code some truly awful code over a weekend and then delete the folder. Rewrite something you’ve banged your head against elsewhere in life and see if your assumptions about what was done wrong hold true.
America's system of graduate education in science and engineering has set the international standard, especially in preparing students to work successfully at the cutting edge of research, and it must continue to do so. Graduate schools have also, increasingly in recent years, contributed to filling the nation's growing need for advanced expertise in diverse nonresearch positions.
Nevertheless, the committee believes that there is room for substantial improvement in graduate education and that some immediate changes are needed in programs, information, and attitudes. These changes are recommended, in part, in response to contemporary stresses. In many important fields, employment in basic-research positions has not kept pace with expanding graduate enrollments, and this has led to unmet expectations among many graduates who have aspired to such positions. The available evidence on unemployment rates indicates that demand by less-traditional employers is growing fast enough to absorb most graduates. However, we note broad criticism from many such employers concerning graduates' immediate suitability for entry jobs—criticism that is often based on a belief that students are too specialized, in view of the variety of tasks that they will confront, and that it is hard for them to adapt to the demands of nonacademic work. With only one-third of new PhDs expected to enter the academic tenure system, the needs of these alternate employees should be given more attention.
There is also a broader concern: Although it is clear that human resources are the primary key to the nation's strength in science and technology, we have not, as a nation, paid adequate attention to the graduate schools as a system for meeting the full range of needs for advanced talent in science and engineering. That is perhaps seen most clearly in the fact that the United States has effectively lacked human-resources policy for advanced scientists and engineers. In effect, human resources have been taken for granted as a byproduct of our policies for the support of research. The simplifying assumption—both inside and outside the university community—has been that the dominant function of graduate programs is to produce the next generation of academic researchers. It is time for a fuller recognition, by academics and policyofficials alike, of the changing way that graduate education in science and engineering contributes to the wide array of national needs. For many of these needs, it is a career in professional service, applied research, development, or consulting that graduates will find open to them.
The committee concludes that improvement of three kinds is needed. First, graduate programs should add emphasis on versatility; we need to make our students more adaptable to changing conditions. This is mainly a matter of local initiative by the universities themselves, but there is a supporting role for government, too. Second, much better information should be routinely provided to students and their advisers so that students can make more realistic career decisions than is now practical. Third, there needs to be a deliberate national reconsideration of graduate education so that the open policy questions, the current information gaps, and the contemporary stresses are systematically addressed by a suitable blend of university, industry, professional society, and government. Those improvements can be made without disruption of the traditional commitment to excellence in basic research that has been, and must continue to be, a hallmark of the US system of graduate education.\
Although the universities are primarily responsible for implementing those changes, national and state government, industry, business, and others can help by providing opportunities to gain experience and exposure to a variety of occupations via internships, alternative certification programs, etc. We do not minimize the difficulty of effecting reform in a system as complex and diffuse as that of US universities. But we already have many relevant examples of the application of local imagination and initiative. We believe that most university leaders will find it in their own interest to reshape graduate education to meet students' career needs better and to ensure universities'vital role in the nation's steady progress toward a knowledge-based society.

No comments:
Post a Comment