|
DavidKiryazi wrote: Is it ok to develop a large application all in code behind and then try to refactor it out later?
Absolutely not.
if you to do so,you will find the workload is far beyond your imagination.
did you read any article about "Object-oriented design patterns"?
|
|
|
|
|
thanks for response Alegria.
I haven't read any books about design patterns. I have mentioned it to a couple of work colleagues but they insist that the best way to learn is just to write code. I disagree because I guess my opinion is that if you learn to write bad code, then it will be harder to change your ways later on.
I guess I might need to read a good book on object oriented design and design patterns. I know the GOF is a must, but apart from that is there any you can recommend to get me up and going? Basically I need something that teaches me OOD that does not use the simple examples like Cars.
I am also considering the purchase of Code Complete 2 and I have stated reading "The Pragmatic Programmer"
Dave
|
|
|
|
|
Code Complete is a great book. I own it and I make it a point to re-read through it every year just as a reminder/refresher. That and 'Software Requirements' by Karl Wiegers is great too.
GOF is important from a high level conceptual point, but in reality I think you will find that thinking in OOP is clearly more important than learning a bunch of patterns. Not that they don;t give some great advice, but I personally think that learning to think in layers is more important that focusing on learning a set of specific patterns.
Don't get hung up so much on the simple examples that most book use as much as making sure you get the higher level ideas behind them. Remember that authors have to not only write so the reader can understand a complicated concept but often times the 'editors' at the book companies can have a huge impact on the content of a book and cause it to be dumbed down a bit too much. You want to read some great stuff on OOD grab yourself a membership to ACM (or IEEE if you happen to be independently wealthy) and read some of the papers submitted there. Some good reads.
If you really want to get used to thinking in a detached manner (IE: code implementation separate from UI and data layers, take a look at doing some work in SilverLight. It FORCES you to NOT put code in your UI layer at all, simply because you really can't. It makes you think in layers and that is a good thing that you can end up leveraging even in the regular application world.
|
|
|
|
|
The Pragmatic Programmer is a gr8 book. I have a paperback and like to read it often.
It gives you discipline in writing code.
|
|
|
|
|
DavidKiryazi wrote: Is it ok to develop a large application all in code behind and then try to refactor it out later?
How about a lot of small applications, calling them prototypes and have an intern make some nice OO code of it in their own pace?
I've seen quite some applications with business-rules embedded in the form-events - some of those started as mere Access-databases, with the same copy-and-paste code all over each form. Over time, requirements and complexity grew, and programmers got added.
Bad code is often better than no code at all, but it also has some predictable drawbacks;
- Refactoring
- "Hunting" for bugs
- Security holes
- Actual undetected errors that mess with user-data without the user detecting it (!)
"You still have $10.000 in your account" or "All files safely backupped! (Total: 0 files)"
- A messed up taborder
I are Troll
|
|
|
|
|
Thanks for response Eddy.
Eddy Vluggen wrote: How about a lot of small applications, calling them prototypes and have an intern make some nice OO code of it in their own pace?
The only problem is that I am somewhat of an intern lol I guess I am trying to develop my skills in the right direction, rather than developing bad habits and having to break out of them late (which is always harder).
I will play around with some prototyping of smaller applications and maybe post some results of what I have acheived.
Dave
|
|
|
|
|
don't want to write code in code behind, since I have been reading it is hard to maintain, etc
Business logic and most of code is generally written in code behind. you must not refrain from it.
Is it ok to develop a large application all in code behind and then try to refactor it out later?
Refactoring costs high if not done properly and many times its tough decision in large projects.
'Refactoring: Improving the Design of Existing Code' by Martin Fowler
is a good book, you can refer.
|
|
|
|
|
Yes, it may not be as maintainable and extensible as you would like but the answer is Yes. When I asked for a peer review with the first team lead I ever worked for, a Russian, his response was "It works? it's good" Great advice. In fact if it works, it's great.
|
|
|
|
|
Have to disagree I'm afraid.
Software that 'works' is not good enough. Good software meets the following criteria
- Performs its function with minimal bugs
- Code Easy to understand by any average developer that may work on it in the future (if advanced techiniques are used that the average developer would not understand they should be commented to at least provide a jumping off point to learn that technique)
- Designed in such a way that changes to requirements can be applied with minimal impact (loose coupling)
- Designed in such a way that any single modification need only be made in a single location (DRY principle)
- Designed in such a way that any fairly generic bit of functionality can be re-used without too much hassle
- Exhibits reasonable performance in terms of speed and memory usage (according to requirements)
- Future proof to a fair degree (in terms of scalability and according to requirements)
and thats not to mention the little nuances such as naming conventions and comment styles
|
|
|
|
|
Hi Guys,
I am designing a Job Engine website for my developers. I have seen a lot of Job engine website in the net and ofcourse i know how the job engine works. But i have a point which worth to be discussed.
ofcouse there will be database for jobs adverts and job seekers profiles/cvs. where job seekers will search for jobs and apply.
Ok, The point that i would like to discuss here is: when the job seeker apply for a job. In real-life scenario, when a job seeker (John Smith) wants to apply for a job. he will send his cv to the employer. And again if the employer after some time advertise for another job. and the Job Seeker (John Smith) submitted his CV (but this time his profile/CV got update from last time).
The Employer, in this case will have two cvs for (John Smith). Old one and Updated one.
Now, comming back to our system design. the Job Seeker (John Smith) registered in the website and he created his profile and build his cv. of course he can update his profile/cv any time.
If we follow the above real-life scenario, by making the system copy the entire job seeker profile againest the job advert he is appying. we may end up with the following:
1. Put more weight on the database by creating multiple job seekers profiles.
2. The Employer may get confused by seeing an old job seeker profile. and when he search about the same job seeker (John Smith) in the job seekers database, he will see a different (updated) profile for the same job seeker.
Ok, the second scenario (which i am plannig to do) is: keeping a single profile for each job seeker and when a job seeker apply for a job.. we just link the job seeker profile with the job advert (no profile copy). but this way we will face the following:
1. Whenever a job seeker updated his profile it will get reflected in all the job advert responses. I mean, when an employer view the responses againest his job advert. he can see for exmple, application date, and job seeker name. and when he click on the job seeker name it just reading the job seeker profile from the database (the current). even if the job seeker applied before a year and before he updated his profile.
what i want from you guys, just your feed back and thoughts.
awaiting your replies.
Hussain Mohammed Saleh Attiya
ISP Technical Manager
Atyaf Telcom - Bahrain
|
|
|
|
|
Hi,
Unfortunatly, no body gives his thoughts or feedback. So, i am going to reply myself.
first of all, when a job seeker builds his/her CV he is always upgrading it during his career to make it more richer and professional.
noboddy will, downgrade his CV. Hince, in any case when the employer view the job seeker cv (the current one) which he submitted a year back and same cv he submitted now.. will not make any different for the employer.. the CV is always uptodate.
so, the system should be designed using the second way. which is keeping a single profile for the job seeker
Hussain Mohammed Saleh Attiya
ISP Technical Manager
Atyaf Telcom - Bahrain
|
|
|
|
|
You are obviously a child of today, no patience at all.
I think you have it wrong, try this scenario.
I am happy applying for 3-4 different types of contract, developer/architect, winforms developer, database, web (under duress) and shortly silverlight. Add in VB and/or C# and I may want 5+ CVs
Now I want a different CV emphasising different skill sets based on the type of contract I want to apply for. Also I have decades of development experience and can easily fill 10 pages simply by briefly listing the projects I have worked on. Most HR teams will choke on anything over 2 pages but some will want the lot so I offer a summary CV and a full project listing.
So in this instance I would retain all CVs, categorise them and allow the developer to indicate which CV to put forward for each contract. I would also have the functionality to replace a CV of x type with a new one.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Thanks Mycroft Holmes,
about having funtionality of creating professional CV containing projects, summary etc. it is already in the design plan.. but i did not mentioned.
we have also, customized a recruitment website for our client using a puchased source code from the following UK company
http://www.strategies.co.uk/products/job-board-software.asp[^]
that was classic asp we bought before 3 years. i dont know if they have the .Net version or not. Anyway,
those, guys also allowing job seeker to replace a CV when he is attempt to apply for a job. this will do the functionality of the differnet set of skills you mentioned.
in our application, we are trying to collect all the good features from the different jobs applications and also, we have to look the real-life HR scenarios.
thanks for your reply
Hussain Mohammed Saleh Attiya
ISP Technical Manager
Atyaf Telcom - Bahrain
|
|
|
|
|
Well doing what was suggested IS real life
It is always standard procedure (talk to a few people that help you locate jobs) to tailor your resume to a specific target, so many people have many multiple versions handy that highlight specific areas for specific reasons. A system that allows profiles to be built should account for that.
While it sounds like you are trying to consolidate ALL a persons information into one picture of a person that covers all their interests and experience, you may find that muddies the waters a bit when trying to do to searches and weighted matching.
|
|
|
|
|
Hi,
The system is already designed and almost going to be finish... from our experience with many clients when we set with the HR team and take all thier requirements. Yes, it is a standard procedures.
Job Seeker Register -> update his profile (his personal details, contacts and address) --> build his cv (using cv builder) or upload a document (CV).
when he attempt to apply he either apply with his current CV or upload new one.
this standard functionality is already taken into the account of the system. What i wanted is just to collect thouhgts and feedback. But i raise just one point which is:
when a job seeker update his CV using CV builder tool. Technically, he his editing the current record not keeping it as an old version CV and building a New CV from scratch (Adding new Record.). And whenever he want to apply with different cv he can do:
1. upload new cv when he attempt to apply for job (this is the easy way)
2. using cv builder to build a new cv (this will overwrite the existing one) then apply with his curent updated cv.
that was my point
bcz some of our client asked for copying the entire CV records againest the job and keep the orginal one unchanged. We are trying to come up with a general job application that fits most requirements.
the point i mentioned. i felt it is not right.
Hussain Mohammed Saleh Attiya
ISP Technical Manager
Atyaf Telcom - Bahrain
|
|
|
|
|
I have been reading "The Art of Agile Development" and it says that design of software should be minimal but not entirely suitable for change.
That instead, classes and such should be built for what the requirements currently do and not to make them for future changes unless required!
It does mention that some people may find that idea "unprofessional" such as my self but it does have a point that "In the end your architecture will reflect change suitable for the requirements you need not what you *could* need"....
Whats your ideas on this?
Thanks
|
|
|
|
|
venomation wrote: It does mention that some people may find that idea "unprofessional"
The professional thing is to deliver what has been agreed upon with the customer. I'm not going to provide a plug-in architecture for something like a ping-command, nce it wouldn't add much value, merely luggage.
Imagine the ping-command popping up each day when you start Windows, claiming that there are new updates to be installed
I are Troll
|
|
|
|
|
Eddy Vluggen wrote: I'm not going to provide a plug-in architecture for something like a ping-command
While I tend to agree HERE, if as a developer/architect, you see an opportunity to design for expansion then why not do it?
When you consider it really, even PING follows a basic 'command line' pattern:
1) Allows the user to select a command
2) Allows the user to provide basic command line args
3) Allows the user to get help explaining the user of the command
4) Allows the use of various command line options
5) ...
so in a way, PING IS using a design pattern.
|
|
|
|
|
Ray Cassick wrote: if as a developer/architect, you see an opportunity to design for expansion then why not do it?
I can see lots of opportunities to design for expansion, but my time is rather limited. If I can choose between building functionality that "might" be used "one day", and something that's needed now - I'll go for what's need now.
Ray Cassick wrote: 1) Allows the user to select a command
2) Allows the user to provide basic command line args
3) Allows the user to get help explaining the user of the command
4) Allows the use of various command line options
5) ...
It's the command line environment that provides that functionality. It's strictly text, and as such, the ping-command does not offer any extensions for a visual plugin to configure it.
venomation wrote: should be built for what the requirements currently do and not to make them for future changes unless required!
That's the current UI, and the ping-command does indeed provide switches. It does not provide it's own scripting-language, it's not prepared to output HTML, it does merely what it's intended for, in the environment it was designed for.
You don't always take extensibility in account, just like we don't always take globalization in account.
I are Troll
|
|
|
|
|
Then perhaps we have a different definition of 'extensibility' and a different vision of how the process 'should' work vs. how it 'does' work.
Eddy Vluggen wrote: It's the command line environment that provides that functionality. It's strictly text, and as such, the ping-command does not offer any extensions for a visual plug-in to configure it.
Actually, given the way PING (as well as just about every other command line driven tool on windows) was written, you CAN wrap a visual component around it if you wanted to now. It is even fairly easy to use the /? options (provided that the original developer stuck to the standard) and have your GUI adapt to 'newer' versions of what it is driving with little work.
I am not trying to say you are wrong here, and I know that we have all fallen into the 'just get it done trap' before, and I am sure at some point been bitten by it also.
Now, globalization is a different story That's freakin' hard
|
|
|
|
|
Ray Cassick wrote: Then perhaps we have a different definition of 'extensibility'
Guess so, and I started with a bad example on top of that. I take the parameters to a console application as part of the UI, just as a button on a form. To quote the topicstarter;
it says that design of software should be minimal but not entirely suitable for change.
Yes, a parameter might be required, but you're not going to prepare additional interfaces based on the idea that you "might" need them. One day. Somewhere.
Ray Cassick wrote: Actually, given the way PING (as well as just about every other command line driven tool on windows) was written, you CAN wrap a visual component around it if you wanted to now.
Has been done a thousand times at least, since the invention of VB4. How often did you download or use such a visual ping? Does it add value? Or does it merely eat your time?
Ray Cassick wrote: I am not trying to say you are wrong here, and I know that we have all fallen into the 'just get it done trap' before, and I am sure at some point been bitten by it also.
Yes, and thanks for the reminder. You're right; it shouldn't be used as an argument to get the product out the door.
"Add a column there, we'll add the other three in the next version."
I are Troll
|
|
|
|
|
I wonder if this is something like designing a system and have it based on 1 currency, you know there are multiple currencies out there, you know that retro fitting for multi currency is going to be a PITA, you know that it is relatively simple to add in the support for multi currency from the start of the design. And yet you do not add the 3 fields needed to support multi currency.
Now that I call "unprofessional" and yep I've seen it done more than once.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
This is quite a good example. The key thing is to know when to allow for future requirements, and when to concentrate on building what you need now. That's a judgement call that you learn through experience. Not every system needs to be multi-currency, but some do, so you need to make a decision about the system you are building.
Many people quote the agile mantra "you ain't gonna need it" when in fact it's just a cover for "I can't be bothered". Other people get caught up in the "what if..." game and end up building enormously complicated frameworks to cover every possible imaginable requirement that any hypothetical future user might possibly want.
|
|
|
|
|
David Skelly wrote: what if
One of my BAs is a classic one of these, I caught her the other day what iffing we got some type of data and asked her if there was any indication that such a thing could happen. Then spat the dummy when she said not that she could see but it might happen.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Thanks for the comments !
I have decided to just use my "intuition" and try not to over design !
|
|
|
|