Should I study Computer Engineering?

Nepali Hacker
Should I study Computer Engineering in Nepal ?

Other landing questions could be:
Where can I study Computer Engineering in Nepal ?
What is course structure of Computer Engineering from TU ?
Why there are so many unrelated subject in TU Computer Engineering (BCT) curriculum ?
What jobs are available for Computer Engineers in Nepal ?
How to understand Programming in Engineering Course ?

If you landed at this post searching for question in title and are in confusion whether to join computer engineering course or not – I would happily say go join in. Get enrolled in some colleges from TU, KU, PU etc..
Or if, if you landed at this post by other means I would guess either you are already studying computer engineering, or you are working on fields other than computer related. I’m talking about different aspects of computer engineering education in Nepal that I got to experience during my college life. If this is not the subject of your interest – I won’t mind if you stopped reading this post from here. Or if you will, I hope you’d be able to give freshers few ideas about whether to pursue higher education in computer engineering or not.

The Seeds

For me, studying computer as an academic course and pursuing a carrier in field of computers was one of childhood dream. I got to touch a computer loaded with DOS which showed some FATAL ERROR ! at the first run. Professionally Windows’s 95 / 98 was out in the market and there was Win 3.1 being taught at schools, with some Logo in primary level and Qbasic programming in secondary level.

From my friends to my computer teacher in school all were quite confident that I will end up studying Computer Engineering in higher studies (Since this is the only/reputed option available in Nepal for higher studies in Computer science). Yes, I did it. It has been two years now I’m working in software/web application development after college.

I had found some interest for staying around computers since 6th grade. Friends and family would ask me to solve their pc related problems. I was fascinated by electronics circuits. With that FATAL ERROR ! box in hand to repair I started searching for Linux OS that fits in a floppy or I would build some GUI to manage my Low End Box in Qbasic. Those were just stuffs that kept me interested in computers.

Later on I was introduced to Google by my brothers. The motivation for me to study computer engineering was all of the resources available in the internet. It was back in 2000 when I typed “how to build softwares” in Google. From that day on, I was always reading online university courses from universities around the world, papers and blogs shared by others tech people, blogs by students like me. The thing that excited me was – the culture of technology users. They share so much of information that – you can get into computer field starting from any given day and land up in a nice paying job within 6 months of time, with some serious effort.

Bill Gates: Forget university, the web is the future for education. #

All of the these practically implemented resources shared in the internet sometimes will give a feel that University courses are impractical, and they teach us practically minimal things that will support us professionally. With this practical side of resources available online, once during my course – I had a feeling that “I could get a job without university course too ” and would be able to pursue a nice career of my interest – programming. Or build a company of my own solely dedicated to software development. But, the whole purpose of joining a college “was” different – it is best seen now after college than at the time of actually doing the metal works at Workshop lab or Drawing unwanted stuffs on Engineering Drawing classes. But, to be true my realization after computer engineering course was If i had only followed what they taught us in University – I don’t think I would have been able to work professionally from the next day I finished my college.
So here comes this post.

Few things, I did my college from Tribhuvan University and subject details below  are referenced from TU course but choice of university would matter less at the end, what matters is “how much you could grasp out of the course and how skillful you become after completing the course”.

University Vs. Professional Practice

TU or KU will not teach us that way that after four 365 days we will graduate and get a job as a software engineer or as sys admin in an Internet Service Provider. They teach us the fundamentals of Computer Science. If you want to get skills that sells or gives you job after graduation it is up-to you to prepare for them. Consider yourself lucky if your university/college cares about providing you trainings/internships to help you get jobs later. But, if you are smart enough, you could get hired even before graduation. This is one of the most awesome thing we get to see in computer engineering field. Skills are choices.

University education will prepare us for higher education with knowledge of computer science fundamentals. However, professionals would expect in us skills related to our field that sells, that could help build softwares, that could manage a network or which could administer a server system of a bank.

Also, a university education (especially in Computer Science) will introduce you to a lot of people and opportunities in your field, will expand your technical horizon, and will force you to learn things you wouldn’t have otherwise learnt on your own. School will open doors for you, it’s up to you to pick which one to walk through. #

University course will help understand most of the basic concepts to the point where you would understand how computers actually work at a fundamental level, and you’d know how to get through the “abstraction” layers that so many people seem to have issues with. If you understand how a transistor works, it’ll give you a better understanding of why writing to a flash device is different from other memories. If you understand how flash devices work, then it’ll give you a better understanding of why you need different file systems to support it. If you understand how the file systems work, it’ll give you a better understanding of why, for instance, opening a file with a million small files might be slow in some systems… and so on and so forth. I think one of the biggest thing that I got out of the school was 4 years of just learning and thinking about the concepts are all inter-related, so that when something fails, you have the required tools and knowledge to actually dig into it and figure out what’s underneath all that abstraction that everyone takes for granted. #

I know this is little bit long winded, but I’m of the opinion that the 4 years spent in college will not be a waste. If you find a right college, just the people you’re going to meet and befriend I think is worth it all by itself. It’s really going to be what you make out of it. And most of it, I loved my college life, I loved my friends, and I wouldn’t trade it for anything in the world. #

But, career learning is not an option in university, you learn it more from on-job training, reading blogs and connecting with industry professionals.

University teaching is based on measuring units, quantifying experiences and not giving people the room to grow as artists. In the market, you can’t quantify everything, we are training too many scientist and not enough artists.

The important thing is to get out there and do stuff. Instead of waiting to be taught, go out and learn. – Paul Graham on “What You’ll Wish You’d Known”

Point is : You’d have to learn what you want to learn by yourself. Engineering course is designed to help us understand fundamentals of that learning curve.
Don’t pick a college based on name brand recognition, pick one with a solid course structure with rich technical resources. Join in. Hack the course in/out, get max from the four years of your life.

Course : Computer Engineering, TU

To see the brief description of what is being taught in the course refer to this post
http://tu-ioe-bct.blogspot.com/2008/11/bachelors-degree-in-computer.html of project blogging.
project-logo
1.0 Mathematics – I
2.0 Physics physics
3.0 Computer Programming – I (C)
4.0 Communication – I (English)
5.0 Engineering Drawing – I
6.0 Workshop Technology
7.0 Applied Mechanics
8.0 Thermodynamics, Heat and Mass Transfer
9.0 Mathematics – II
10.0 Chemistry chemistry
11.0 Electrical Engineering Materials
12.0 Electric Circuits – I
13.0 Engineering Drawing – II
14.0 Mathematics – III
15.0 Computer Progrmming – II (C++)
16.0 Electric Circuits – II
17.0 Semiconductor Devices
18.0 Logic Circuits
19.0 Basic Computer Concepts (BCC)
20.0 Applied Mathematics
21.0 Instrumentation
22.0 Electronic Circuit – I
23.0 Microprocessor
24.0 Electrical Machines
25.0 Electromagnetics (EM)
26.0 Numerical Methods(NM)
27.0 Communication – II (English)
28.0 Data Structure and Algorithm (DSA)
29.0 Theory of Computation (TOC)
30.0 Computer Architecture & Design (CAD)
31.0 Microprocessor Based Instrumentation (MBI)
32.0 Control System
33.0 Engineering Economics
34.0 Probability and Statistics
35.0 Computer Graphics (CG)
36.0 Communication System
37.0 Operating System (OS)
38.0 Database Management System (DBMS)
39.0 Minor Project project
40.0 Project Engineering
41.0 Organization & Management
42.0 Computer Network
43.0 Software Engineering
44.0 Artificial Intelligence (AI)
45.0 Elective
46.0 Engineering Professional Practice (EPP)
47.0 Technology Environment & Society (TES)
48.0 Digital Signal Processing (DSP)
49.0 Simulation and Modeling
50.0 Information System (IS)
51.0 Major Project
52.0 Elective – II
Course
The above list will eat up four most energetic and valuable years of your life. If you did it well – there are lot of possibilities.

Scenario : This needs to be changed

  • Teacher
    • Theory focus
    • No senior lecturers available (almost all of them left country for higher education)
    • Weak at practical implementation of the course
    • Teach to earn mindset
    • Can teach anything.. any subject to any faculty (ridiculous)
    • Knows everything in theory
    • Lack of subject domain expertise
  • Student
    • Theory Focus
    • Lack of seriousness in course study
    • Lack of knowledge about scope of course
    • Lack of practical application of theory
    • Takes projects as burden
    • Exam centric study
    • No interest in self learning
    • Stressed of unnecessary Electrical/Electronics subjects
    • No idea of Collaborative Development
    • No Interest in professional latest happenings

This list reflects those who do a irresponsible teaching and the students who loose their interest in study in the middle of the course. Writing these as an outsider – there came these points needed to be managed during college life. These scenario needs to be changed. We need to inherit the sharing, caring and collaborating culture from the history of world’s technical developments.

After course : Career options

Most of the Computer Engineering graduate are working in one of the following positions in Kathmandu.

  • Programmer (Software Engineer)
    • Desktop Applications Developer
    • Web Applications Developer
    • Mobile Applications Developer
  • Network Admin
  • Sys Admin
  • DBA (Database Administrator)
  • Web/UI Designer
  • Q/A  (Quality Assurance)
  • 3D Animator / Modeler
  • System/Project Management
  • Information Architecture (System Designer)

We are being taught C/C++ for basic programming/ software development concepts but professionally “PHP, Javascript, JAVA, C#, Python” are of the popular programming languages used in Nepal. Ref: Popular Programming Languages in Nepal.

Computer Engineer
So any student who learns these industry standard software development platforms on her/his own effort will sure hold better chance of working as “Software Engineer.”  This applies to all other jobs mentioned above too. What this means to a engineering student is you should give some time to find out what’s your actual interest is in – and direct the knowledge you get out of course study to the practical implementation in that field with all your energy.  It is up to the students to chose a career of their interest, that they are passionate about.

Subjects : Relations

Let’s take a different look at the above subjects. Let’s group related subjects together. This grouping will give one a clear idea of how the subject being studied are related to each other.

Math

1.0 Mathematics – I
9.0 Mathematics – II
14.0 Mathematics – III
20.0 Applied Mathematics
34.0 Probability and Statistics
33.0 Engineering Economics

English

4.0 Communication – I (English)
27.0 Communication – II (English)

Drawing / Metal Works

5.0 Engineering Drawing – I
13.0 Engineering Drawing – II
6.0 Workshop Technology

Physics / Chemistry

2.0 Physics
8.0 Thermodynamics, Heat and Mass Transfer
10.0 Chemistry

Mechanical/Electrical/Electronics

7.0 Applied Mechanics
11.0 Electrical Engineering
12.0 Electric Circuits – I
16.0 Electric Circuits – II
21.0 Instrumentation
22.0 Electronic Circuit – I
24.0 Electrical Machines
25.0 Electromagnetic (EM)
32.0 Control System
36.0 Communication System
48.0 Digital Signal Processing (DSP)

(I still find these subjects useless for a computer engineering student. Bite me.)

Digital Electronics Basic
(Computer Hardware)

17.0 Semiconductor Devices
18.0 Logic Circuits
Basic of Digital Logic, and how electronic components like Diode, Transistors help one formulate devices with computing “logic”.

How Computers are made (Computer Hardware)

23.0 Microprocessor
30.0 Computer Architecture & Design (CAD)
31.0 Microprocessor Based Instrumentation (MBI)

How computer processes “instruction” (eg. calculations, input, output etc) is studied from ground up in these subjects. Concept of Embedded System designs (eg. Robots, Computer Controlled devices, Digital home appliances).

General Information about Computer & Computer Engineering as Profession

19.0 Basic Computer Concepts (BCC)
46.0 Engineering Professional Practice (EPP)
47.0 Technology Environment & Society (TES)

Every Computer Engineer needs to understand the basic building blocks of computing devices. How computer systems affect overall society in terms of advancements (TES). State of Computer engineering profession in Nepal is studied in EPP.

Project/Software System Design / Management

40.0 Project Engineering
41.0 Organization & Management
43.0 Software Engineering
50.0 Information System (IS)

These subjects are most important subjects from management point of view. Any engineer would some day get involved into project management,  software/system design/modeling and Information Architect career. Anyone who ends up working in any of the development, networking, DBA or SYS Admin field will benefit from having the idea of project, people and software system design/management.

Programming the Computer / Algorithms

3.0 Computer Progrmming – I (C) – Procedural Programming
15.0 Computer Progrmming – II (C++) – Object Oriented Programming
Assembly / Microprocessor, Prolog for AI, MATLAB, Computer Graphics Algorithms
Data Structures / Algorithms, Numerical Methods, Weka / Data Mining
SQL / MySQL / Oracle

However it’s not going to matter what programming courses you get to learn – you really learn programming once (not a trivial task) for me I started with Qbasic on 9/10th grade, and from there you can pick up whichever languages (PHP, Javascript, C#, JAVA, Python, Ruby, Lisp ) you need (a comparatively trivial task). Most importantly, you should learn outside the classroom — make your own projects/applications/websites or contribute to existing projects. I did. This helps in a lot of aspects — it trains your motivation, improves your skills in programming, can be used as resume fodder, and so on.

Advanced Computation

26.0 Numerical Methods(NM)
28.0 Data Structure and Algorithm (DSA)
29.0 Theory of Computation (TOC)
35.0 Computer Graphics (CG)
44.0 Artificial Intelligence (AI)
49.0 Simulation and Modeling

NM – is for advance mathematical calculations.
DSA is the subject that will give heavy focus on algorithmic implementation of numerous real world problems with computer.
TOC is highly theoretical subject and is best studied for language design, compiler design.
CG – if done well can inspire one to get in to Game development, 3D modeling, Computer Vision etc.
AI – Useful in Games, Robotics and automation, expert systems.
Simulation – Modeling and simulating high end computing systems.

Computer System, Storage, Networking

37.0 Operating System (OS)
38.0 Database Management System (DBMS)
42.0 Computer Network

One should be familiar with how the computer “actually works”. This is where Operating System is dissected to depth.
Every application in the world will need some storage to store data/information. No software engineer could work without writing database queries.
Anyone interested to work as Network Administrator take Computer Network seriously.
Subject of your choice

45.0 Elective – I (Image Processing, Optical Fiber, Mobile Communication etc)
52.0 Elective – II (IPv6, Biomedical, Data Mining etc.)

You can chose for “easiness” or for “interest”. Normally, choosing for interest is a tough choice. And a better choice.

Projects is where you get to show your Software design, development, project management skills studies so far.

39.0 Minor Project project
51.0 Major Project
Hierarchy of subjects with their relative hardness:

Math > Physics > Electrical/Electronics > Fundamental Computer Science > Software Engineering > Information Systems > Management > English > Art
Master from the root. Other will follow naturally.

For career in software development

First year of engineering education will be more about “learning how to learn” than anything else. Once you get into track, understand what is your real interest is in – after that its time to focus and be determined to dive into it. At this point you should be sure whether you want to be an pure academic (teaching) or a pure industry engineer (career options above). It’s again up-to you. Since I was more interested in software field – here’s what I think you may find interesting to focus on during college life for the same.

Focus On

  • One computer subject one project
  • Projects for fun
  • Build Unique Apps / Projects
  • Don’t repeat yourself while coding
  • Don’t build what is already built
  • Build with awesome Interface/UI/UX/Design
  • Build apps to launch
  • Unit Tests / Testing / Automation
  • Share your code or part of it
  • Use open source to the max
  • Document your project well
  • Always share your learning experience
  • Always work in groups
  • Collaborate as much as possible
  • Ask someone to mentor you
  • Maintain a regular blog from day one at university.
  • Learn where any subject under discussion will help professionally.
  • This is all about connecting the dots, as Steve Jobs said

Project Ideas (< a month projects)

Project Ideas

  • Nepali Chat Bots
  • Nepali Language Parsers
  • Local Games 2d/3d
  • Nepali Social Network Models
  • RSS-to-SMS
  • MIS as Web Apps
  • Inventory Management Web Apps
  • Online Multiplayer Games
  • Language Converters
  • Nepali Calendar
  • AI in Games
  • OCRs that recognize Nepali Text
  • Extensible Content Management Systems
  • Data Backup Systems
  • Multimedia Players
  • Road Simulators
  • Electricity Flow Simulation
  • Location Based Social Web Apps
  • Real-time Online News Systems
  • Real Time Online Discussion Forums
  • Online Payment Get-ways
  • Mobile Games
  • Quiz Softwares
  • Event Management Apps
  • To-do list manager
  • Bookmark Managers
  • Browser Extensions
  • Plug-in/Extension to your favorite softwares
  • Web Scrappers
  • Report/Chart/Analysis Libraries
  • Personal Blogs/Websites
  • Work on open issues of Open Source apps

 

Suggestions

Suggestions to Computer Engineering students

  • Self Study
  • Internet is your library – Search, search and search more
  • Try to understand the concept of programming not syntax
  • Algorithms and Data Structures are everything
  • Projects are portfolio for your first job interview
  • Wikipedia is your teacher
  • Open Source Applications are you Code Gurus
  • Online Discussion Forums are your Communities
  • Organize events, competitions centered around Software development
  • Learn to use Collaboration Tools
  • Be disciplined inside and about your profession
  • Build Skills that sell
  • Join/Follow communities of developers
  • Learn to respect community, get max from it
  • Find what is the BUZZ in tech
  • Learn about Project Management seriously
  • Build products that can solves existing software problems in our community
  • Know about Documentation
  • Learn about software testing / Quality Assurance
  • Do one project by yourself per computer related subject
  • Give others, Take from others
  • Share your project code in the internet
  • No one becomes professional without a hard work
  • Those who are doing good now did their best while studying
  • No one is born talented, its the hard effort that pays later

Regular Reading : Recommendations (Online)


Wikipedia : Once a week  (Start with a tech article, follow all the inside links)
Stackoverflow / Sort questions by vote and read 20 most voted questions in all the subjects of your choice.
Regularly read updates from at least two or three domain experts of the field of your interest.
Join Local Communities of Tech Users. (eg. KtmGTUG, Hackers Chautari, FOSS, BarCamp)
Get a habit of reading blogs, online discussion forums regularly.
Publish your new found knowledge in your blog.
(refer: http://wiki.semicolonvalley.org to find other local resources)

6 comments

  1. Sushil Gupta Reply

    I wish I had read this while I was in first year or before. Really valuable suggestions for now too. Thank you for an excellent post.

  2. S Kafle Reply

    Thanks for this well written article. I wish I had read it some years before. Many of +2 passouts ask me if they should join Computer engineering. I will simply share this link to them.

    BTW, I think you shouldn't have listed Digital Signal Processing (DSP) under electronics and marked as useless. It is the basis for Image processing, Speech processing and many computer engineering subjects.

Leave a Reply

Your email address will not be published. Required fields are marked *