The Flaws of College Education Today

Teens this days have smart phones- phones that are more powerful than most computers ten, even five years ago. These phones can access the internet very readily- in fact, most networks here in the Philippines offer a very cheap 50peso 1-day unlimited internet promo. Soon, affordable tablet PCs will reach the public, and a library of books will be available right next to a browser, all in our student's fingertips.

What does all these mean, in the context of our current college education system?

This means that memorizing theories are no longer needed. It will not matter if you don't know the answer, because the answer is only a few clicks away, right in your pocket. Seatworks, homeworks , quizzes and tests becomes obsolete, since these are the ways to test if a student remembers a lesson, which is unnecessary with the current technology. You forgot the next ingredient for the recipe? so what? LMGTFY. What's the difference between the star, bus and ring topologies? This. What's the truth table and the logic circuit for the function: P && (Q || R)? Easy.

The way the current system measures the abilities of the students is outdated (and in my opinion, no longer work).  And remember: What you can't measure, you can't control.. and if the colleges are not controlling what our students are learning, then what's the point? Imagine going to the university hoping to learn how to become a nurse, and after four years, everything you know are not only outdated, but even elementary grads can download a free app that knows most of what you do?

So what do we do? Stop going to school? NO.

Let me tell you guys a story. Two fresh CS graduates land a job in a company. They were given identical tasks- let's say, design and implement a module on a program. They both have zero experience programming in the industry, but has unlimited access to both the company's documentation as well as the internet. The problem is: there's only one permanent spot available, and the management have to decide which of the graduates to retain after their probationary period. If you are that manager, how will you pick? How do you decide, which one is better? Remember that they both have access to the same resources.

If I'm the manager, the graduate who have grasped the program quicker gets the job. Since everybody can become an effective employee (in the sense that the resources to learn how to do stuff are both accessible and free), then you have to become an efficient employee- spend less time learning and spend more time doing stuff. Now how can we do stuff faster? Let me ask you this: if you're learning to play basketball, how do you improve your game? The same is true on almost every discipline: You have to practice. You have to experience things, instead of memorizing them. An example: learning how to make the Fibonacci sequence appear on your computer is cute, but applying the Fibonacci sequence by creating a game will make you experience more (not to mention a lot more fun and challenging).

Bottom line: A parrot can memorize words, but will never understand its meaning. Don't be a parrot: Make new things, apply what you know NOW, and practice always.. and remember: Knowing is not enough. My two cents, Sayonara and have a great new year~

Failure

Have you ever noticed that when everything goes as planned, you actually learn less? Do not be afraid to fail. Think of it this way: there’s not much to learn when things work. When they fail however, you have a chance to understand where the boundaries are, providing us an opportunity to learn more when things go awry.



Edison quote mug by ~estranged-illusions on deviantART


Imagine: After creating a program and testing it against the known correct results, everything works. Congratulations! You just learned how to solve the problem. BUT! Consider this- When you test your program and something goes wrong, what do you do? Give up? Of course not! One of the best ways to study programming is through trial and error, and being wrong is an integral part of the learning process. When the program doesn't work as intended, we find the bugs and fix it. We test more. We think more. We learn more.

However, constant failure is another beast entirely. The saying goes: "Fool me once, shame on you, Fool me twice, shame on me". This is particularly true in programming, where a correct line of code will always produce the correct output and vice versa.

A professor in a prestigeous college once said that programming is a routinary job- eg. doing the same things over and over again. This true only when the programmer is NOT learning, and is constantly wrong, and thus have to repeat his job over and over again. A real programmer writes code only once, tests and tweaks for errors, learning what to do and what not to do along the way, and reuses old code extensively. Strive to be that kind of programmer.

Until next time, Sayonara~

Dates and Primary Keys

I've got a story to tell :D I remembered this because one of my current coworkers asked me about the curious way I write dates in code (such as 10X23, or 10902). After telling the tale, I decided to also share my experience to you guys~

T'was a dark and stormy night..

It was a dark and stormy night by =aki-no-mia on deviantART
[/kidding]

Anyway, several months before I started in my current job, I got this project to expand an HR tracking software from a local startup. It was a fairly simple project and the company already has a small internal development team that is doing another part of the system (the Point-of-Sale, if I'm not mistaken). Not only that, but an ISO 9001 Audit was ongoing in the other departments of the company- with people rifling through databases and checking that everything has a trail (eg. properly documented).

One of the Database Tables had a column named "ID", which is the table's primary key. The data was formatted like so: 20100123, 20100202, etc. Obviously, it was in a YYYYMMDD date format, so this is what the auditor did:

1.) Change the key of one record from 20100129 to 20090101, which is a valid key
2.) Open the 2010 monthly reports.

And lo and behold, the record disappeared from the reports. It turned out that one of their developers was using the ID of the records to filter the reports:

If CDbl(Record.ID) >= 100000 Then Report.Add(Record)

I don't know if it was brilliance or plain stupidity. I guess it does work. IDs are supposed to IDentify specific records, and not keep track of dates- its data formatting does not, should NOT matter.

As a workaround, the Senior Dev (who was pissed and almost fired the dev responsible) instructed us to use the following date format: YYMDD - Two digits for the year, One AlphaNum for the month, and two digits for the day. The month AlphaNum works like so: 1 through 9 for January to September, X for October, Y for November and Z for December.

Now THAT is brilliance: It shortened the ID from 8 digits to just 5 and prevented devs from converting the IDs to numbers and using them mathematically :D

Until next time, Sayonara~

Optimus Prime (a.k.a Transformational Leadership)

Attending a seminar at Newlife is one-part worship, one-part pure content, and one-part advertisement. Anyways, me and the systems department where I'm currently employed attended this seminar there called "Transformational Leadership", sponsored (prominently) by World Vision. It was a good seminar, although the speaker (Pastor Boris Joaquin) was not very engaging, but still- I'd like to share a few thoughts about it~

Ok, what striked me the most is the 5-part "Training Cycle"
  1. "The Teaching"
    • Develop their skills through detailed instructions 
    • Stay with your "disciple" every step of the way
  2. "The Demonstration"
    • Show, don't tell
    • Let the "disciple" try their skills out in real situations
  3. "The Coaching"
    • Find their flaws, make constructive criticism 
    • Inspire your "disciple" to increase his/her skills
  4. "The Release"
    • Stay in the background, help only when necessary
    • Give the "disciple" the power to decide for him/herself 
  5. "The Next Generation" 
    • Confirm that your visions and goals are still aligned
    • Let your "disciple" spread his expertise to others through this 5-part cycle

Another topic that I liked is the transformational leadership model~ This is how I understood it..
  • Start with yourself, to give yourself some perspective. If your don't walk the talk, then you'll lose followers faster than you can gain them. [Additional Reading: Mat.3:13-4:11]
  • One-on-one with a few of your most trusted people. Don't try to "change the world" as soon as you can, start with those nearest and most open to you. [Mat.4:18-22]
  • Start building your team. Let your 'chosen few' choose their own 'chosen few', stay in the background and guide the vision of your community. [Mat.10:5-10, Mat.28:19-20]
I guess that's that, I've got an "Open Source" seminar to prep, so expect the slides about it on my next post. Until then, Sayonara :D

Object-Oriented Seminar

Slide Notes Here: http://ow.ly/2Coay
After a few weeks, I was finally able to continue my seminar on 3P.Net~ Btw, The slides above have the same opening as the last one (first three or four slides, I think) and most of the juicy parts are on the slide notes. I have already touched on Lazy Initialization and Singletons in this blog, and I've talked about object-oriented programming stuff as well, so I don't think I should more stuff in this post :D

If you have any questions, clarifications or suggestions about any of the topics I've discussed in this blog, just message me in my Google Profile, Facebook or Twitter. Until next time, sayonara~

Importing Inherited Implements

What’s the difference between Imports, Inherits and Implements?

Imports
…lets the developer USE a Namespace, using a referenced library; eg. the Math Object is under the System Namespace, so in order to use the functions that it shares, you’ll declare “Imports System.Math” somewhere in your code.You can use any library that you have referenced in your project WITHOUT using Imports keyword by typing the full class path, eg. “a = System.Math.Abs(10.2);”. By using the Imports keyword, however, you can shorten the line of code to just “a = Abs(10.2);”.

Implements
…lets the developer EXTEND a Class, using an Interface. These interfaces usually start with the capital I in front of them, and implementing one of these would force a class to use certain names and types of certain methods and properties. You have to explicitly declare these constraints, or the class will not compile. However: the Interface itself cannot contain any code, it just enforces a pattern so that other objects can call a generic interface to address multiple implementations.

Inherits
…also lets the developer EXTEND a Class, but this time using a base class. The base class are complete classes with working methods and properties. It does not enforce any constraints to the class that’s inheriting it (unlike Interfaces) so you can overload (or choose to ignore) any method you like.

~~~

An Analogy: Everyone can become Wet. Dogs are Animals. Cats are Animals. All Carnivores can eat Meat.

Now, since everyone can access the method MakeWet, then an “Imports System.Water” might have been declared, so that everyone can just call the Method “MakeWet” instead of repeatedly writing “System.Water.MakeWet”.

We can say that both Dogs and Cats implement the interface IAnimal. This way, we can give both of them the method IAnimal.Talk() and force the coder to write code inside the function. Afterwards, since all animals have the same method name ‘Talk()’, we can use them like so:
Zoo.Add(New Dog)
Zoo.Add(New Cat)
For Each Animal as IAnimal in Zoo
Animal.Talk()
End For
// Output:
// ”Woof Woof”
// ”Meow Meow”
However, all animals eat alike. Instead of copy-pasting the eat method on each animal, lets just have them inherit the Base Class clsCarnivore, which automatically gives them the method ‘EatMeat’. Of course, if an animal only eats certain kinds of meat, we can overload the method, but if not, no extra code is needed.

There, and done~! Don’t get confused.. Until next post, Sayonara~

w00+! Btw, what's the opposite of writer's block?

Ok, so I said quite a few posts back that I'm pulling back on blog posts to focus on my new job at Isuzu Automotive. However, I'm quite inspired these past few days (maybe because of the thrill of educating again), and I'm currently writing 3 blog posts for you guys ^^ Yey!

Now, I'm about finished with the first one: Inherits Implements and Imports, so that'll go up approximately tomorrow evening. One of my superiors asked me about the difference between them, and I couldn't remember off the top of my head. So I decided to do some research and write about it here.

Next is a fun post, which will also be the first post on my new (!!) blog: FinalFantasy14.Philippines. I got a Beta Key for the Square-Enix's upcoming MMORPG: Final Fantasy 14, and I'll try to document what I learn and share the experience in a filipino player's perspective.

Lastly, I'm writing something about developing Android Applications. I brought an HTC Wildfire last week, and I'm kindof intrigued with the development of Android as an operating system.

Ok, that's it! I need to go write some more~ Sayonara, for now!