The key to a good read is abstraction. Extract the rules; the rules should stand alone; not dependant on the details. The details should be given its due place - the lowest rung in the ladder. A good read charms the reader into taking with him, the rules.
I would much rather write a Knuth than a Fowler.
7:39 PM
Monday, September 19, 2005
Articles 'n stuff
Bridging the Gap
The following discourse is limited to entry level technical skills required of graduates in the computing/computer science field within a Sri Lankan context.
Let us commence with the premise - "The goal of (computing/computer science) higher education is to produce employable graduates". If we accept this premise then we must also accept that we have, in no small measure, failed to deliver the goods.
We still hear complaints from the industry that our graduates are not upto-the-mark. That they lack the skills needed in a commercial environment. That there is significant overhead in training them. That industry alone carries the burden of gearing graduates for employability. That they do NOT hit the industry running. This is the reality.
The university side of the story is, that various measures have been put into place to lessen the academic-industry gap. Industry collaborations, industrial placement, Guest/visiting lectures from industry experts, are just a few of the measures adapted.
But nevertheless, within the first few months of induction to an industrial environment new graduates undergo a type of culture shock due the totally alien manner in which enterprise development is done, in contrast to small system development methods they were exposed to as part of coursework. Although the atomic skills are sufficient they lack an overall big-picture-view and find themselves in a new environment with new tools, new practices and bigger problem domains and solution spaces.
So what then, is going wrong?
Let us dissect the problem from an industry angle. What type of software development does the sri lankan software industry engage in; in a broad sense? My guess is that the vast majority would be business application development. It is only a guess, ofcourse. So what would industry consider as ready-to-run skills of a graduate who would be put to work developing a business solution? Again a guess; my guess would be, that industry would require
1) That graduates possess competence in programming, networking, databases. These 3 broad areas can be thought of as the de-facto core competencies.
2) That graduates have mastered at least one industry level programming language(Java,c#,c++, in decreasing order of popularity)
3) That graduates be familiar with at least one DBMS(Oracle,MS-SQL,MySql/Postgres, in decreasing order of popularity) and be fluent in SQL.
4) That graduates be familiar with at least one web technology(JSP,ASP.Net,PHP...) and have a broad understanding of most.
5) That graduates be familiar with at least one development framework(J2EE,LAMP,.Net,MFC...)and have a broad understanding of the main frameworks.
6) That graduates have a broad understanding of SE/RAD/Enterprise Application Development principles as well as SE/RAD/Enterprise Application principles within the context of a development framework
7) That graduates be aware of and have been exposed to popular development platforms(Eclipse, Visual Studio...)
<aside>
These 7 requirements would be the constituent elements of the broad category known as technical skills. Infact the broad expectations of industry would be that graduates have,
1. Strong problem solving skills
2. Strong communication and interpersonal skills
3. Strong technical skills
Now that we have placed technical skills within a broader picture, we can consider whether university education infact gears graduates for these 7 entry level requirements.
</aside>
Looking at modules for computing programs at IIT and UCSC, we can safely assume that requirements 1&2 are developed from the freshman year itself. A quick perusal of the final year modules would indicate that requirements 3&4 are also accounted for. Even requirement 6 has been partially dealt with by the presence of modules such as SE and RAD.
Overall, university curriculums appear weak in tackling requirements 5,6&7. The essence of requirements 5,6&7 is that graduates should be ready-to-run with current frameworks, development practices and tools for enterprise business application development. Why? As in, why is this so important? Because that is the main revenue generation activity of industry - enterprise business application development.
So why does our higher education system not tackle these Enterprise Application Development requirements? Instead, why are the final year modules of a typical computing degree in SL heavily leaning towards Artificial intelligence, Computer Graphics, Formal Methods,Pattern Recognition etc... How helpful are these topics in gearing graduates towards industry?
There may be 2 reasons why universities shy away from a module such as Principles & Best Practices in Enterprise Application Development.
1) There is no room for such a topic when you fit in the classical modules
2) Such a module is uncomfortably close to certification courses such as MCSD,JCP...
The second reason is the more serious barrier. However, I believe that there is room for an academic treatment for concepts such as layering, Inversion of Control frameworks, Controller Patterns etc... It is however important to be as unbiased as possible considering the polarized nature of application frameworks.
Let's see what a module like Principles & Best Practices in Enterprise Application Development should have as its aims & objectives
Aims
1. Introduce students to the architecture of the most popular application frameworks
2. Introduce students to the principles of Enterprise Application Development
3. Introduce students to industrial level Application Development Platforms
Objectives
1. Students should be able to critically evaluate application frameworks
2. Students should be able to develop an enterprise level application using a popular framework conforming to enterprise application development best practices
3. Students should be able to critically evaluate Application Development Platforms and leverage their power for application development
Indicative Content
A discourse on the J2EE, .Net, LAMP architectures. Patterns used in J2EE, .Net execution model(front controller, page controller...).Layering principles used in Enterprise Application development and framework support for layering( Session/Entity beans). A discourse on IDEs and IoC frameworks.
Having said all that, it is not my intention to advocate an obliteration of the AI, Machine Learning, Pattern Recognition type subjects. Ofcourse these subjects are needed for a healthy academic process. I merely suggest side-lining one or two such subjects in favour of a subject that is directly relevant to the employability of a graduate.
The problem lies at the academic-industry boundary; the final year of a computing/computer science degree program. The problem itself is graduates not having enterprise application development skills. The solution is simple - provide them these skills with an appropriate/relevant final year module.
Having done a once over, I realize that this is an (rather long winded)oversimplification of a multi-faceted problem. But even this oversimplified, naive solution is a step in the right direction... 6:34 PM
Let us commence with the premise - "The goal of (computing/computer science) higher education is to produce employable graduates". If we accept this premise then we must also accept that we have, in no small measure, failed to deliver the goods.
We still hear complaints from the industry that our graduates are not upto-the-mark. That they lack the skills needed in a commercial environment. That there is significant overhead in training them. That industry alone carries the burden of gearing graduates for employability. That they do NOT hit the industry running. This is the reality.
The university side of the story is, that various measures have been put into place to lessen the academic-industry gap. Industry collaborations, industrial placement, Guest/visiting lectures from industry experts, are just a few of the measures adapted.
But nevertheless, within the first few months of induction to an industrial environment new graduates undergo a type of culture shock due the totally alien manner in which enterprise development is done, in contrast to small system development methods they were exposed to as part of coursework. Although the atomic skills are sufficient they lack an overall big-picture-view and find themselves in a new environment with new tools, new practices and bigger problem domains and solution spaces.
So what then, is going wrong?
Let us dissect the problem from an industry angle. What type of software development does the sri lankan software industry engage in; in a broad sense? My guess is that the vast majority would be business application development. It is only a guess, ofcourse. So what would industry consider as ready-to-run skills of a graduate who would be put to work developing a business solution? Again a guess; my guess would be, that industry would require
1) That graduates possess competence in programming, networking, databases. These 3 broad areas can be thought of as the de-facto core competencies.
2) That graduates have mastered at least one industry level programming language(Java,c#,c++, in decreasing order of popularity)
3) That graduates be familiar with at least one DBMS(Oracle,MS-SQL,MySql/Postgres, in decreasing order of popularity) and be fluent in SQL.
4) That graduates be familiar with at least one web technology(JSP,ASP.Net,PHP...) and have a broad understanding of most.
5) That graduates be familiar with at least one development framework(J2EE,LAMP,.Net,MFC...)and have a broad understanding of the main frameworks.
6) That graduates have a broad understanding of SE/RAD/Enterprise Application Development principles as well as SE/RAD/Enterprise Application principles within the context of a development framework
7) That graduates be aware of and have been exposed to popular development platforms(Eclipse, Visual Studio...)
<aside>
These 7 requirements would be the constituent elements of the broad category known as technical skills. Infact the broad expectations of industry would be that graduates have,
1. Strong problem solving skills
2. Strong communication and interpersonal skills
3. Strong technical skills
Now that we have placed technical skills within a broader picture, we can consider whether university education infact gears graduates for these 7 entry level requirements.
</aside>
Looking at modules for computing programs at IIT and UCSC, we can safely assume that requirements 1&2 are developed from the freshman year itself. A quick perusal of the final year modules would indicate that requirements 3&4 are also accounted for. Even requirement 6 has been partially dealt with by the presence of modules such as SE and RAD.
Overall, university curriculums appear weak in tackling requirements 5,6&7. The essence of requirements 5,6&7 is that graduates should be ready-to-run with current frameworks, development practices and tools for enterprise business application development. Why? As in, why is this so important? Because that is the main revenue generation activity of industry - enterprise business application development.
So why does our higher education system not tackle these Enterprise Application Development requirements? Instead, why are the final year modules of a typical computing degree in SL heavily leaning towards Artificial intelligence, Computer Graphics, Formal Methods,Pattern Recognition etc... How helpful are these topics in gearing graduates towards industry?
There may be 2 reasons why universities shy away from a module such as Principles & Best Practices in Enterprise Application Development.
1) There is no room for such a topic when you fit in the classical modules
2) Such a module is uncomfortably close to certification courses such as MCSD,JCP...
The second reason is the more serious barrier. However, I believe that there is room for an academic treatment for concepts such as layering, Inversion of Control frameworks, Controller Patterns etc... It is however important to be as unbiased as possible considering the polarized nature of application frameworks.
Let's see what a module like Principles & Best Practices in Enterprise Application Development should have as its aims & objectives
Aims
1. Introduce students to the architecture of the most popular application frameworks
2. Introduce students to the principles of Enterprise Application Development
3. Introduce students to industrial level Application Development Platforms
Objectives
1. Students should be able to critically evaluate application frameworks
2. Students should be able to develop an enterprise level application using a popular framework conforming to enterprise application development best practices
3. Students should be able to critically evaluate Application Development Platforms and leverage their power for application development
Indicative Content
A discourse on the J2EE, .Net, LAMP architectures. Patterns used in J2EE, .Net execution model(front controller, page controller...).Layering principles used in Enterprise Application development and framework support for layering( Session/Entity beans). A discourse on IDEs and IoC frameworks.
Having said all that, it is not my intention to advocate an obliteration of the AI, Machine Learning, Pattern Recognition type subjects. Ofcourse these subjects are needed for a healthy academic process. I merely suggest side-lining one or two such subjects in favour of a subject that is directly relevant to the employability of a graduate.
The problem lies at the academic-industry boundary; the final year of a computing/computer science degree program. The problem itself is graduates not having enterprise application development skills. The solution is simple - provide them these skills with an appropriate/relevant final year module.
Having done a once over, I realize that this is an (rather long winded)oversimplification of a multi-faceted problem. But even this oversimplified, naive solution is a step in the right direction... 6:34 PM
© gumz 2005 - Powered for Blogger by Blogger Templates