Recently i have been getting questions: "how can i learn to program?", "How can i become a professional programmer?" Well i have rather than an answer, but a guideline. I can only show you the door, you will be the one to walk through it.
First things first, to go into this world you need to prepare your mind, be ready to learn, be ready to code at least bunch of hours a week, if you are not enthusiastic or curious about how things work, its time to start changing your mindset. Be ready to face problems that will literally turn your brain into a hyper multitasking machine, most of all be ready to see the world differently because this world you are stepping into, you haven't heard of anything like it before.
OK i didn't mean to scare you that way, fortunate for you, this days there are more easier ways to get exposed to the programming world, unlike years ago that we literally go through books and manuals in order to learn. A bunch of web applications are developed to guide you through the basics of programming in various languages, and i am going to talk about a few here.
Codecademy
This site my favorite, why you ask? well because it has a comprehensive introduction to Python which happens to be my favorite language, aside that if you are interested in web development, there are courses for HTML, CSS, JavaScript, Ruby and each contains a project at the end to test if you actually learnt something. This site presents you with an interactive way of learning, using an online interpreter for various languages, you can follow instructions from each chapter, write the code in the editor instantly and test your code if it works. Also there are hints to somewhat "difficult" tasks in case you can't find your way. Also you gather points from actually completing modules, and they have something called streak, which is just a measurement of consecutive days you spent completing tasks. Additionally, after completing a language training, you can choose to start learning some API's like that of twitter, facebook e.t.c and guess what? its completely free.
Code School
This web platform is similar to Codecademy in a way, with HTML, CSS, JavaScript, Ruby (Ruby on Rails). But it additionally have courses on Objective-C, iOS development, using version control systems (GIT), JQuery and a bunch of other API's. Though unlike Codecademy, some courses have charges.
Haskell
If you are curious about functional programming languages, haskell is a place to start, this site gives a short introduction to haskell programming language interactively, giving you an overview of the concept and learning some basic syntax.
There are many other sites you can use to learn aside this one's, sites such as Cousera and Udacity where you can find full university course lectures in video with interactive course works and tasks, which you can do to test your knowledge and also certificates are awarded in some courses to those who satisfy the requirements of the courses.
Not being in school is not an excuse to not educate yourself, this is the 21st century, you can go to school online and self educate yourself at home.
You have successfully found the backdoor into my mind, a hacker (Software Scientist).
Search This Blog
Monday, April 7, 2014
Wednesday, April 2, 2014
Future of development cost.
Development cost depends on various factors such as, availability of developers of the given domain, size of the project, number of technologies to be used (i.e if more than one, is there need to get a developer for each technology or one developer with knowledge of all can handle the job).
This days there has been a call for everyone to know how to code, with tech celebrities and entrepreneurs supporting the project "Code a day" (code.org) and schools introducing programming at elementary level. Even though not everyone will want to follow this path as a career, there will be a huge amount of hubby developers. If this is the case, everyone will probably develop his or her own software, that really doesn't seem practical but with availability of open source tools out there for anyone to fork, build and use, anything could happen.
So what happens when 80% of the population knows how to code, and each person either freelance to get extra cash or works as a full time professional. With this much developers, probably a lot of people will be competing for one job, this means that people can bid for a job, and everyone will like to make his or her price as low as possible in order to get the job, which will probably affect the amount it takes to develop a particular kind of product.
As it is right now in sites like freelancer.com, odesk.com e.t.c, the bids to develop a particular program are so low i am beginning to think how much it will be when we have more developers. But ironically we need more developers, a lot of countries outsource their development jobs to countries like india, and china where professionals do a work for less price, and some countries outsource because there are no good developers to get the job done where they are.
This is just a personal evaluation as i can't predict the future, and i know many of you are thinking about the same thing. Give me your feedback on what you think will happen to development in the future.
This days there has been a call for everyone to know how to code, with tech celebrities and entrepreneurs supporting the project "Code a day" (code.org) and schools introducing programming at elementary level. Even though not everyone will want to follow this path as a career, there will be a huge amount of hubby developers. If this is the case, everyone will probably develop his or her own software, that really doesn't seem practical but with availability of open source tools out there for anyone to fork, build and use, anything could happen.
So what happens when 80% of the population knows how to code, and each person either freelance to get extra cash or works as a full time professional. With this much developers, probably a lot of people will be competing for one job, this means that people can bid for a job, and everyone will like to make his or her price as low as possible in order to get the job, which will probably affect the amount it takes to develop a particular kind of product.
As it is right now in sites like freelancer.com, odesk.com e.t.c, the bids to develop a particular program are so low i am beginning to think how much it will be when we have more developers. But ironically we need more developers, a lot of countries outsource their development jobs to countries like india, and china where professionals do a work for less price, and some countries outsource because there are no good developers to get the job done where they are.
This is just a personal evaluation as i can't predict the future, and i know many of you are thinking about the same thing. Give me your feedback on what you think will happen to development in the future.
Thursday, January 16, 2014
Hobbyist Programmers
The world as we know it now heavily depends on computers, with this comes a great need for professional programmers. However, there are a great community of computer programmers that sole lonely code for fun, extra cash, community or to automate their daily work.
This group of programmers are known as "Hobbyist Programmers". For the large industries and closed source community who believe every piece of code should be sold, do not understand the idea of someone coding for fun or to give back to the community. But this community of programmers are the real hackers as we know it, those whose room window illuminate deep in the middle of the night, those who have sleepless nights and long hours of coding just to make the world a little better and a comfortable place to live in. The Open Source community which is the largest community of programmers consists of hobbyist programmers.
This community makes it possible to have a bunch of documentations, tools, source codes and so much tutorials on the world wide web, it is practically a matter of take and plug nowadays in a matter of developing a computer program or mobile applications.
However, what does it mean for the future of computer programming? is it possible for all of us to learn how to code? what if we are all computer literates and every single one of us can code? who is gonna use your application when everyone can simply make his? how will this change the world that we know and the lifestyle we live?
I will tackle this issues on my next issue, before then, everyone can live a comment below regarding this matter and in the next blog i will discuss my opinion and the opinions left in the comments.
This group of programmers are known as "Hobbyist Programmers". For the large industries and closed source community who believe every piece of code should be sold, do not understand the idea of someone coding for fun or to give back to the community. But this community of programmers are the real hackers as we know it, those whose room window illuminate deep in the middle of the night, those who have sleepless nights and long hours of coding just to make the world a little better and a comfortable place to live in. The Open Source community which is the largest community of programmers consists of hobbyist programmers.
This community makes it possible to have a bunch of documentations, tools, source codes and so much tutorials on the world wide web, it is practically a matter of take and plug nowadays in a matter of developing a computer program or mobile applications.
However, what does it mean for the future of computer programming? is it possible for all of us to learn how to code? what if we are all computer literates and every single one of us can code? who is gonna use your application when everyone can simply make his? how will this change the world that we know and the lifestyle we live?
I will tackle this issues on my next issue, before then, everyone can live a comment below regarding this matter and in the next blog i will discuss my opinion and the opinions left in the comments.
Friday, January 3, 2014
Conscious or Unconscious dream?
So for the past week i have been having this weird problem with sleep, when i go to bed 3:00 AM, of course with my earphones on and connected to the soundbox, i tend to live within the musics themselves, having something i feel like a dream that goes with the rhythm of the music but at the same time still feeling conscious enough that i actually know what song is playing. It is so weird to me because, before a week ago, when i plug my earphones to sleep, i fall deep asleep after atmost 5 songs.
I wake by 6:00 AM and do whatever it is that i do, feeling as if i haven't slept at night which i am not sure i actually did. By 11:00 - 12:00 AM i feel this strong urge to sleep which i definitely succum to wether i like it or not, sleep till between 5:00 - 7:00 PM where i wake again, work till 3:00 AM and continue the Circle.
The problem is, it seems impossible to break the cycle, for the fact that during the day i can't seem to force myself to stay awake till night time, and during nighttime, i can't force myself to sleep properly, rather finding myself in this realm between being asleep and awake.
Whatever it is, i have a very serious week ahead of me, where i have two major examinations, a couple of coding to do for my work colleague and games to play, yes you heard me right, games. I play games, and not talking about games like Dota or LoL (i play does too sometimes), but games such as CheckIO, some might not see the logic behind solving problems as games, well i do. Also Farmville 2, Candy Crush, Criminal Case and Pet Rescue Saga are so addictive to me, well now i don't like the fact of saying that i am addicted, but rather they are mandatory to my daily living.
I wake by 6:00 AM and do whatever it is that i do, feeling as if i haven't slept at night which i am not sure i actually did. By 11:00 - 12:00 AM i feel this strong urge to sleep which i definitely succum to wether i like it or not, sleep till between 5:00 - 7:00 PM where i wake again, work till 3:00 AM and continue the Circle.
The problem is, it seems impossible to break the cycle, for the fact that during the day i can't seem to force myself to stay awake till night time, and during nighttime, i can't force myself to sleep properly, rather finding myself in this realm between being asleep and awake.
Whatever it is, i have a very serious week ahead of me, where i have two major examinations, a couple of coding to do for my work colleague and games to play, yes you heard me right, games. I play games, and not talking about games like Dota or LoL (i play does too sometimes), but games such as CheckIO, some might not see the logic behind solving problems as games, well i do. Also Farmville 2, Candy Crush, Criminal Case and Pet Rescue Saga are so addictive to me, well now i don't like the fact of saying that i am addicted, but rather they are mandatory to my daily living.
Monday, December 9, 2013
Programming then and Programming now.
I get why people always say programming back in the day was way more difficult than our days now, not all of that is correct. Yes it was difficult to get your hands on documentations and even if you do, you probably have to go through a library of books, even if you managed to do that, it is difficult to get your hands on a terminal, you either had to pay for a time on a time-sharing machine or be part of some computing laboratory to be able to actually program something. Now if all this are managed, writing programs are not so complicated, in the sense that, the programs that are considered cutting edge back then are what we now our days call high school projects, and not much programming languages that you have to stress yourself on learning, only a few existed. No much development standards to adhere to, most of the programs are terminal based, so you don't have to worry about dealing with user interfaces or making your program fancy enough for your users (i.e users back then are mostly computer scientists and mathematicians who are well intelligible and care more about functions than design), and also there are less programs to be your competition, so anyway at all you write your programs, people will still use it.
Now talking about the modern day programming, it is a lot easier for a nine year old to start programming computers, there are lots of materials, documentations, video and even interactive tutorial at anyones disposal on the internet, programming languages are in variety, different types with different paradigms, languages that have been simplified and are much more readable by even someone who has little knowledge on programming. Besides that, there are lots of tools and lots of reuseable codes that someone can easily get his hands on, thanks to the Open Source Community. But having all this at ones disposal will not make that person a good programmer and will definitely not ensure the development of a cutting edge software, now it is fair enough to say that every software have been developed, of course that is not true but to come up with an idea that has never been implemented is nearly impossible. Even if one managed to come up with such an idea, one needs to learn the best and recent technologies used in his/her area of development, implementing to this days standards is way more difficult than it used to be, and trying to develop it in such a way that is sheds a light and shine above all the softwares out there will take months, if not years of sleepless nights of tweaking, debugging and re-coding (depending on the software size). Another point is, back in the day, computing technologies might last for 10-15 years, but this days, technologies change so fast and the field evolve more quickly, to the point that in the lifetime of a software (depending how big) it is possible to tune it to meet 3-4 different generations of technologies.
This analysis is a personal opinion and not meant to start a war between old school and modern developers, but simply to point out that simplicity of software development greatly depends on the perspective and what is put into consideration. Bitching about how hard it is, or stating all the if's will not change anything, so raise your head up, grab a pc and start hacking because before your are able to say "Jack Robinson" someone has put out that idea roaming in your head for quite sometime now and technology has evolved.
Now talking about the modern day programming, it is a lot easier for a nine year old to start programming computers, there are lots of materials, documentations, video and even interactive tutorial at anyones disposal on the internet, programming languages are in variety, different types with different paradigms, languages that have been simplified and are much more readable by even someone who has little knowledge on programming. Besides that, there are lots of tools and lots of reuseable codes that someone can easily get his hands on, thanks to the Open Source Community. But having all this at ones disposal will not make that person a good programmer and will definitely not ensure the development of a cutting edge software, now it is fair enough to say that every software have been developed, of course that is not true but to come up with an idea that has never been implemented is nearly impossible. Even if one managed to come up with such an idea, one needs to learn the best and recent technologies used in his/her area of development, implementing to this days standards is way more difficult than it used to be, and trying to develop it in such a way that is sheds a light and shine above all the softwares out there will take months, if not years of sleepless nights of tweaking, debugging and re-coding (depending on the software size). Another point is, back in the day, computing technologies might last for 10-15 years, but this days, technologies change so fast and the field evolve more quickly, to the point that in the lifetime of a software (depending how big) it is possible to tune it to meet 3-4 different generations of technologies.
This analysis is a personal opinion and not meant to start a war between old school and modern developers, but simply to point out that simplicity of software development greatly depends on the perspective and what is put into consideration. Bitching about how hard it is, or stating all the if's will not change anything, so raise your head up, grab a pc and start hacking because before your are able to say "Jack Robinson" someone has put out that idea roaming in your head for quite sometime now and technology has evolved.
Friday, November 22, 2013
Source Control
Source control also known as version control and revision control have been a great technology for managing the changes in computer programs also allowing multiple developers to work on a project without interrupting each others work. It has been here for a while now and there are numerous distributed model tools are developed for this purpose, tools such as Git, Mercurial, SVK, Codeville, Bitkeeper e.t.c. Though some of this tools are proprietary softwares, Open Source community has provided open version of this tools, the most widely used being Git.
Some of this tools are integrated in a more user friendly environments such as IDE's and Web based application, such as the Git, which makes it easy to create and manage git repositories straight from Eclipse, github.com, bitbucket.org. Personally i make use of the both github and bitbucket to manage my projects.
The idea of version control systems is to keep a sequential record of a file from the first revision to the latest. Programmers usually use the concept of branching to keep parallel stable versions of code. Each developer assigned to work in a feature works on a separate branch of his own, after which sends a pull request and it is then merged into the master after being reviewed allowing multiple developers to work concurrently.
Git works in almost different way than other know VCS's, it specifically treats is data as a set of files and anytime one stores some data or makes changes, git takes a snapshot of the files and saves the reference to it. Also whenever a file is not changed git doesn't store the files again making it a bit more efficient. Git has various workflows; Centralised workflow, Gitflow workflow, Branch workflow and Forking workflow. This workflows are a design way to handle or manage your data, create a branch from master, work on it, merge back to master.
The basic branch workflow involves creating a repository, initialize git with git init, clone the repository with the command git clone [url], do your work in the branch created on your system, add all the files git add * or add the individually git add [file], commit your changes with a comment with git commit -m "comment", and push it to master with git push origin master. Master is the original project history and it is not advised to work on master but on the dedicated feature branch, this avoid the problem of the master containing broken codes.
This is just a summary of Source control with specifics on Git, a more detailed tutorial will be in place in future. A lot of companies use version control for projects and it is advised to learn how they work and work on some yourself as it will serve a great deal when working in teams.
Some of this tools are integrated in a more user friendly environments such as IDE's and Web based application, such as the Git, which makes it easy to create and manage git repositories straight from Eclipse, github.com, bitbucket.org. Personally i make use of the both github and bitbucket to manage my projects.
The idea of version control systems is to keep a sequential record of a file from the first revision to the latest. Programmers usually use the concept of branching to keep parallel stable versions of code. Each developer assigned to work in a feature works on a separate branch of his own, after which sends a pull request and it is then merged into the master after being reviewed allowing multiple developers to work concurrently.
Git works in almost different way than other know VCS's, it specifically treats is data as a set of files and anytime one stores some data or makes changes, git takes a snapshot of the files and saves the reference to it. Also whenever a file is not changed git doesn't store the files again making it a bit more efficient. Git has various workflows; Centralised workflow, Gitflow workflow, Branch workflow and Forking workflow. This workflows are a design way to handle or manage your data, create a branch from master, work on it, merge back to master.
The basic branch workflow involves creating a repository, initialize git with git init, clone the repository with the command git clone [url], do your work in the branch created on your system, add all the files git add * or add the individually git add [file], commit your changes with a comment with git commit -m "comment", and push it to master with git push origin master. Master is the original project history and it is not advised to work on master but on the dedicated feature branch, this avoid the problem of the master containing broken codes.
This is just a summary of Source control with specifics on Git, a more detailed tutorial will be in place in future. A lot of companies use version control for projects and it is advised to learn how they work and work on some yourself as it will serve a great deal when working in teams.
Thursday, October 10, 2013
Building Kivy app to Android apk
Days back i began setting up kivy-python-for-android environment in order to build my kivy app into an android apk, i was faced with alot of difficulties as it is my first time building this. However i accomplished my goal and will share my experience with also difficulties i face and how i was able to solve them.
After developing kivy application, kivy developers have provided a somewhat detailed steps to building an apk. According to the page http://kivy.org/docs/guide/packaging-android.html one needs:
After setting up all the prerequisites, cloning python-for-android repo using git is a pretty smooth process, however the problem arises when trying to build your distribution. The "distribute.sh" script is found in the /path/python-for-android/ directory and runing it as specified in the kivy page might result to an empty /python-for-android/dist/default and no matter what you do, it will continue to be empty
And in this way, if you run the build.py script it will keep throwing some errors like "Error: missing object name for verb "update"" blah blah blah. When you see such an error the way to solve it is:
NOTE: You can simply download the kivy virtual machine, which comes with all the dependencies pre installed, all you need to do is to configure your paths, build your distribution and build your app.
Have fun Hacking....
After developing kivy application, kivy developers have provided a somewhat detailed steps to building an apk. According to the page http://kivy.org/docs/guide/packaging-android.html one needs:
- A Linux system (Virtual machine)
- Java
- Python 2.7
- Jinja2
- Apache Ant and,
- Android SDK
- You need to install android API level 8 or 14 and pretty much any NDK version as i tested.
- Exporting each of the appropriate paths such as the ANDROIDSDK, ANDROIDNDK, ANDROIDNDKVER, ANDROIDAPI, PATH.
After setting up all the prerequisites, cloning python-for-android repo using git is a pretty smooth process, however the problem arises when trying to build your distribution. The "distribute.sh" script is found in the /path/python-for-android/ directory and runing it as specified in the kivy page might result to an empty /python-for-android/dist/default and no matter what you do, it will continue to be empty
And in this way, if you run the build.py script it will keep throwing some errors like "Error: missing object name for verb "update"" blah blah blah. When you see such an error the way to solve it is:
- To simply delete the /dist/ directory
- Run "./distribute.sh -m "kivy""
- Check the /dist/default/ directory if its empty
- If not, you are ready to go.
NOTE: You can simply download the kivy virtual machine, which comes with all the dependencies pre installed, all you need to do is to configure your paths, build your distribution and build your app.
Have fun Hacking....
Subscribe to:
Posts (Atom)