I disagree. I most often start with an interface IF I want to use interfaces for that type, then implement it. You see: the interface is a type definition, not a type implementation, so if you define types first, you can think through the application without actually building it.
It has been very successful to me :)
(and of course, agile-fanatics disagree with me, as refactoring sucks with interfaces but IMHO: who cares what agile-fanatics say).
Interfaces are essential for multiple-type inheritance, and therefore are an essential element in your class model in a single-implementation inheritance environment like .NET.
I've been re-reading this post from Sikin Joseph for most of the afternoon....I got it into my head
The most common cause for such Interface rigidity discussed above is when developers create an interface that mirrors your type (much like many COM interfaces), rather than using interfaces to enforce a contract.
Avoid doing this:
public class Foo : IFoo
{
public DoFoo()
...
}
public DoBar()
And try something more like:
public class Foo : IFooable, IBarable
Where IFooable & IBarable each enforce single finite bits of behavior. IFooable => DoFoo() and IBarable => DoBar()
That way, when you need to add a new feature or want to refactor, you can simply add your functionality (with an interface or not)) without affecting the existing interfaces. Alternatively, you might decide that your class violates the single responsibility principal and do an extract class refactor so that the IFooable and IBarable behaviors are separate.
Keep in mind that each interface doesnt "define" your whole class, it simply defines a contract that your class must minimally enforce.
~Lance
Sijin Joseph pointed out a pretty nice example of a reusable error dialog that Jason Bock put together.
I have thought for a long time that the only profession more arrogant than Medical Doctor was IT, specifically programmers. The response to Mr. Joseph's blog continues to confirm my suspicions. A recent cultural example: The CDW commercials showing just how stupid everyone else in the organization is, as the "wily and brilliant" systems guy manipulates them, is a perfect example of the contempt that IT professionals have for those who don't speak their language. The ignorance displayed in these responses as to the value of managing an organization, never ceases to amaze me.
I have always marvelled at the creativity and craft needed for good systems design and creation. I have seen little reciprocation or appreciation of the skills required to effectively manage subordinates, superiors, customers (inside or oustide) and peers. In fact, most IT professionals, if they were to admit it in their heart of hearts, are incapable of the human communication skills required to (among many other things): a), balance the needs of employees, company and shareholders b), counsel and develop/discipline employees c), sell concepts to allign support for strategic movement, or d), Even speak to a group!
Mr. Joseph has the gravitas to speak to the value of both contributors to an organization. Most of the respondants to his blog do not. There is nothing easier in the world to do than to criticize leadership. And nothing more arrogant and ignorant than dismissing what you don't understand.
how much do architects get paid an hour?
Thats really very good article for beginners.
If you liked NDepend and its code query language, be sure to also check out .QL, an object-oriented code query language developed by Semmle:
http://semmle.com
.QL is object-oriented, and that makes it very flexible: you get better content-assist, shorter and more intuitive queries, and thanks to overriding it is easy to tailor existing queries to new needs. For now it's available only in Eclipse for Java, but if there's sufficient interest, a .NET version is around the corner.
We'd love to hear what you think of it; post on the forums at http://semmle.com, or just email me at oege@semmle.com.
[Disclosure: I am a prof in computer science at Oxford, and the CEO of Semmle]
Even though most of the managers I have had are completely clueless, there are a few that actually are good and deserve the pay. The part that is hard to understand is why a project manager gets paid more than a senior developer. They capture requirements and just monitor the progress of the project. Not the outcome. A good development lead / project lead can do just the same and has a direct impact on the outcome. I hope corporations will see that senior developers do a lot better job of gathering requirements and driving a project than project managers. We still need portfolio managers to help with project priorities, but that is about all.
For the person who said developers are a dime a dozen. Try finding a senior developer that can handle a half a million dollar project. I spent weeks interviewing and only found one who might be able to do the job. Now try finding a PM. It took less than a week to find several.
I like SouthParks's - "Something Wall-Mart This Way Comes" analogy better :).
Hi Twain, Could you elaborate on what exactly I have misunderstood about building systems?
Pingback from software engineering » Blog Archive » What they don't teach you in CS class
Pingback from software engineering » Blog Archive » Software Engineering Radio Podcast on Sensor Networks
As a nivice to the build process, I found this page quite informative and comprehensive. Thanks
Sahil Malik go have a curry or something
Where can i get this book in India especially in Pune
Thanks a lot for this useful list - I will check out the ones I did not know about.
I was tracking down a similar bug in my application, and this was driving me nuts. Eventually I just put a boolean value in a static class to check if it had loaded before.
Straight from MSDN: "Form.Load Event: Occurs before a form is displayed for the first time."
It's not even documented in the ShowDialog method. What a bother. Thank you for the post.
I'm looking at similar issues with a third party vendor. If you don't mind, I'd like to compare notes. You can email me directly at Paul<dot>Ballard<at>BallardSoftware<dot>com
Thanks,
Paul
Impressive list :) A lot of good tools here.
i made copy of your script, and save it as vssCheckInOut.vbs.
but when i run th escript i get error :
C:\jone\script\vssCheckInOut.vbs(1, 29) Microsoft VBScript compilation error: Exp
ected end of statement
can you help to find what i make wrong?
Hi jone - the script is written using jscript and not vbscript
thanks
sijin, that's a great article. i am studying the build process for .net applications. can you tell me what are the major activities in a build process with deliverables of each stage, approximate time lines and persons involved. thank once again!
Thank u ..it gives good overview of connection pooling in ado.net
hot free layouts myspace backgrounds
free myspace codes for music videos of hate me
cool man. thank a lot. appreciated
we hardly get paid enough
i am a bin man and i get paid £4 an hour and my brother Andrew gets paid £3.50 an hour, he works in a call centre.
You only get paid alot when you are a doctor or something.
Pingback from VS 2005 Toolset. « Dotan’s Weblog
Pingback from Is Ruby "The One"?
Pingback from How to leak memory in .Net - Statics and Event Handlers
A Manager? Oh sure learn a couple of programs and call you self a manager. Crystal reports no problem, but learn a programming language and "wow" that's a different story.
It has been a long time since I've seen something this cool.
SearchMe - Cool Search Engine
This is a very cool search engine - very interesting and I'm waiting to see how it catches on.
However, the "searching" portion of it is a bit under-par.
Gosh provides an alternate way to run command- line Groovy scripts, as well as a simplified way to write Windows Services ( WinNT Services ) using Groovy. Gosh treats scripts the same, whether they are run from the command- line or as a service (including
Pingback from Wikipedia » Blog Archive » An alternative model of computation for concurrency
Very interesting list, I agree, it would be very difficult to find someone with proficiency in all areas. And depending on the type of job, you would be looking for different abilities in different areas. In any case I would also add the following topics to you matrix.
+ Interaction Design
UI Design
Aesthetics
Action Flow
+ Professionalism
Basic work ethics
Objectives / Learning goals
Enthusiasm
Awesome!
Favorite rows:
problem decomposition
books
blogs
Thanks for sharing!
from wikipedia, Competency includes altitude and behavior as well, it's far more important than technical skills, IMHO.
Bo be good programmer in a team, altitude comes first.
Hi,
I was trying to do a VSS checkin checkout automation (mailing the admin once the checkin or checkout done on the database).. i copied the source code from this link
msdn.microsoft.com/.../bb509341.aspx
I created a activeX dll as metnioned in the above link and when i tried to open the database the init function is called..but when i tried to add file/checkout any files..the function which handles these events are not called at all.. any clue abt why?
I actually use subversion to update our site at www.mangosteennation.com. I have a folder on the server that is the SVN folder. Then whenever I need to do a deploy to production, I do a get latest on that folder. Then I copy over all of the files from that SVN folder over to the folder that has the live website running in it. It seems to work pretty well. Only thing I never copy is the web.config because it has connection string information in it for our testing database.
We post about something similar. We are using SVN to deploy our websites and we really like it.
Something bad happen during a deploy? No problem you can just revert back to the last version.
You can find our blog post about it here:
blog.lavablast.com/.../I2c-for-one2c-welcome-our-new-revision-control-overlords!.aspx
Thanks for the tip. This is really cool and very helpful in our case.
Paul, if you build the web.config handling into your build process (if you use ASP.NET, using Web Deployment projects), then you can use svn to deploy web.config and all.
You've been kicked (a good thing) - Trackback from DotNetKicks.com
We use subversion to update our integration / testing server and then run vice-versa between that and the production server, which very quickly moves only the files that have changed.
I use SVN to manage the the production environment for the company I work for. And although I don't use it currently I built a web interface for a past client that would allow them to update their production environment from an SVN repository. I used some classes from AnkhSVN for that solution.
Why would you want to deploy with all those SVN folders? Also, if it's a web application project why would you want to deploy with all the .file_extension.cs and .designer.cs files?
I can see how it could work but I prefer cleaner deployments.
Our set-up:
- team checks code itno SVN
- build server with CCNet automatically checks for code updates every 10 minutes or so, rebuilds if code updates are found
- new builds are automatically deployed to DEV server
- on request, deploy of a specific build to INT(egration) server can be done
- ditto for PROD
Actually, code that's gonna be deployed to INT is branched first. So it's always a specific branch that is deployed to INT (or PROD), whereas the trunk is used for ongoing development (though we also use branches to develop things that can't be in the trunk yet).
We've actually written an interface where we can select which branch of which project needs to be deployed to which server in which environment.
Pingback from Dew Drop - May 6, 2008 | Alvin Ashcraft's Morning Dew
Our customer facing site is 4 gigs with all the artifact files. We have 2 designs and 2 developers that belong to different departments and it was a nightmare to keep track of changes.
I (one of the developers) wrote a few tiny utils to parse svn logs and svn info to find files that were added, changed, deleted and using that info built nant scripts for each process. I zip up any files that have been added or changed from our working copy and run the nant script for those that were deleted.
I created a web interface for the designers so that after they commit a change they can hit the web interface, choose the revision number and start the deployment. The web interface also has an iframe that points to a local CC.NET, staging CC.NET and prod CC.NET. After they choose the revision they do a force build local which moves everything to staging. do a force built on staging to run a backup and deploy. after they test then do a force build on prod.
Using Subversion as a Deployment Tool
hubs about Functional Languages to It is possible to write functional programs in Neumann languages by totally avoiding the use of store and modeling the entire computation using only functions that use local variables. On the other hand functional languages
I\'m supporting this idea all the way! I can not imagine who would disagree with it. On the whole - make posts like this more often.
hey sijin,
I have done exactly the same thing as you said but I cannot access inter net wirelessly. The only difference is that I have mtnl Triband connection instead of hathway. Please tell me if I have to do some other setting also?
Please help buddy
Thanks for posting about Searchme – we really appreciate it! We wanted to let you know that we’ve just added this cool new feature called Stacks, which lets you collect groups of your favorite web pages and then share them via email, web sites, Facebook®, MySpace®, and blogs like yours. We’ve also added Searchme Media Search, which lets you search for images or videos from Flickr™ and YouTube™.
Check out our Demo Videos:
www.searchme.com/.../press_videos.php
Or check out Stacks in action:
www.searchme.com/stacks
Thanks!
The Searchme Team
I agree with your requirements ideally, but any platform that requires browser plugins makes deployment harder, particularly to large businesses or organizations. I am more inclined to think that fundamental platform improvements across all the browsers are the real solution. Many significant steps in this direction including more consistent CSS and higher performance JavaScript environments across major browsers have made plugin-free HTML+CSS+JS web applications capable of delivering good user experiences. Some interesting developments like WebKit's client-side databases could significantly simplify the deployment of web apps with offline support if adopted in other major browsers.
GWT is a great, standards based solution... Grails as well.
Lexapro side effects. Lexapro.
I also use subversion as a deployment tool to live sites (mainly pre-compiled Flash presentations/applications and PHP code). The staging and live sites are working copies and I update from a tagged online version. I love the efficiency of the process and the ease of use. Basically, every integrator in our office, junior and senior can update live sites without much worries (knowing that a rollback is just as easy).
I do admit that publishing to production with the added .svn folders isn't all that clean, but what's the cost of drive space versus the cost of inefficient processes?
Unfortunately for us, the person in charge of hosting architecture is bent on "compiling" the website when it comes to live deployment... I don't get it. Managing added files and folders is relatively easy, just a zipped package to upload. But what about renaming, deleting, and rolling back ? You'll have to script something to do the actual deletion and renaming... Subversion does that for you. You'll have to copy your entire site to be able to rollback ... ".svn" folders are probably lighter than a full duplicate all in all.
Is subversion a security threat? I just don't get it.
Did you ever come across any documentation on those COM interfaces (SourceSafe and Outlook.Application)?
SourceSafe in particular?
I have been scaring for code snippets to figure out how to use it and that is just not doing it for me anymore.
@Martin: Subversion isn't a security threat in and of itself as far as I know. The only problem is that, in general, a host of people have access to subversion, and most of the controls around subversion are procedural in most organizations - developers agree to commit to certain branches, etc, but they are not actively prevented from doing so.
This means that introducing broken code into "production" is relatively easy. Yes, it could be rolled back, but....
Keep in mind that the person in charge of hosting architecture is being held accountable for a functioning production system at all times. He's on hook to put process in place that aren't sufficiently controlled.
If you do want to use Subversion for managing production, I'd recommend talking to your head of hosting and asking what controls would be sufficient for him to feel comfortable using svn in production. Don't be surprised if this ends up needing a separate svn repo managed slightly differently than the dev repos.
Thanks for this list, It was very helpful
I still do not have a clear idea of how you guys are using SVN for deployment.
In my environment, I have development and production servers. SVN repository is on the DEV server, every time we need to deploy to PROD, we push the changed files manually to the PROD servers. I can sync the Dev and Prod servers but there are a lot of unused files in Dev which should not go to Prod. Tagging seems to be one of the options in SVN but haven't tried it yet. Can you please advice?
Thanks in advance.
The software industry just like any other new technology is currently immature, 20 years ago there was no demand whatsoever in the general business market. Now with desktops everywhere that has changed - with the advent of the internet we all know what happened with India.
Thanks, great article.
I want to know the build process of a software in PHP.
If you find managing people more difficult than managing computers it demonstrates nothing other than your relative ability at managing people vs managing computers to extrapolate it further is a misreading of the system log.
I find it interesting to read these articles. Believe me when I say as a very experienced IT professional that managers have an extremely difficult job balancing expectations of the business and supporting the development team. For sure developers are intelligent people - they can also be manipulative and be revisionist in the facts and they are all not as driven as they envision themselves. They don't all often contribute as much as they think they do can be slackers as much as the next guy. Ours are highly paid and I think we have a good team, but although they are a talented crew, they often complain about: everything, everyone, and regularly avoid responsibility for missed deliverables. I highly respect them but do not always respect their lack of respect for the management process. We have been using Agile methodologies which seem to be fantastic in some ways but although it seems like a wonderfully adaptive process it can seem to give them no possibility to be judged or considered an underperformer. The difficulty and inability to judge their work using these processes is troubling for me and although my team is a good one, I worry about developers that want to shirk the process when it suits them and use it like a crutch other times. Stop whining and get to work and don't worry about being considered an artist! I would put my work ethic up against any of developer on my team but wonder if they look in the mirror and judge their own work frankly as often as I do my own.
In your opinion what would be the proper way to create a Release check list before code is push to a production environment..
iam having issues in dot net c# for decoding attachments which are in uunecoded format
pls help me :) resolving this
Pingback from Conn.Close & Conn.Dispose | keyongtech
This is really an informative one. Thanks
Apparently this got cross-posted to someone else's site. I reformatted it for them; you are of course also welcome to it, since it's your content originally.
www.starling-software.com/.../programmer-competency-matrix.html
Hi Sijin,
Thanks for the info. Very precise and informative, thanks for the link too!!